ImageListは参照型であるため、関数またはサブに渡すときは、コピーリスト自体ではなく、リストへの参照を渡すことを意味します。渡されたリストへの関数またはサブの変更は、元のリスト自体を変更します。たとえば、..次のコードでは、byval
を使用してbyval
を使用してfootball
オブジェクト(参照型)を渡しても、.Diameter
プロパティがfootball
に変更されたとしても、bl
オブジェクトのプロパティが変更されます。それはByVal
代わりのByRef
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
ChangeDiameter(football)
End Sub
Public Class Ball
Public Property Colour As Color
Public Property Diameter As Single
End Class
Dim football As New Ball With {.Colour = Color.White, .Diameter = 20}
Public Sub ChangeDiameter(ByVal bl As Ball)
bl.Diameter = 5
MessageBox.Show("Supposedly byval ball diameter =" & bl.Diameter.ToString)
MessageBox.Show("original ball diameter =" & football.Diameter.ToString)
End Sub
Webページのイメージング。これがあなたの目的です。テキスト、マージン、色などあらゆる種類のものがあります。
また、ウェブサイトへのリンクを含むaWebPage
という変数を宣言すると、この変数によってウェブサイトのプロパティを変更できます。変数自体はリンクを保持し、Webページは保持しません。
そのリンクを保持する変数を別のプロシージャに渡し、その別のプロシージャで変数anotherWebPage
を呼び出す場合は、同じ手順でanotherWebPage
を使用してWebページのプロパティを変更し、あなたが変えているのはまだウェブサイトです。
Webサイトのプロパティを表示するaWebPage
を使用する場合、両方のaWebPage
とanotherWebPage
両方がそう1を変更し、同じWebページに同じリンク(または.NETで、同じ参照)を保持するので、その性質はまた、変更されています同じWebページを変更しているため、両方の変数が変更されます。
クリア?私は価値のタイプと参照タイプに慣れていく年月がかかりました。
「何もない」はオブジェクトではありません。しかし、変数をNothingに設定しても実際にはそれが破棄されるわけではありません。変数がそのオブジェクトを参照していないことを意味します。したがって、他の変数がそのオブジェクトへの参照を保持していなければ、オブジェクトはガベージコレクションされる可能性があります。しかし、あなたの質問は不明です。変数をNothingに設定する前または後に、ByValまたはByRefを使用する必要があるかどうかを確認していますか? – DodgyCodeException
ImageListは、これを理解するのが難しいですが、ListViewコントロールとTreeViewコントロールのイメージソースとしてのみ便利です。だからあなたは通常、UserControlがそれを消費し、それを処分するのを世話すると仮定します。それであなたはもはや何が起こったのか気にしません。 ImageListがList(Of Image)の代わりになるとは決して考えないでください。 –