Etwas unklar sind mir Verweise (Pointers?) auf Klassen in VB.NET. Die Frage, die ich stellen möchte, kann durch ein wenig Testen beantwortet werden, aber ich frage mich, ob jemand eine anständige Erklärung (oder Links, auch) posten könnte.
Wenn Sie eine Klasse erstellen:
Public Class ReferenceClass
Private myBooleanValue As Boolean = False
Public Property BooleanValue As Boolean
Get
Return myBooleanValue
End Get
Set(value As Boolean)
myBooleanValue = value
End Set
End Property
End Class
Und dann eine Klasse, die diese Klasse tatsächlich als Eigenschaft verwendet:
Public Class UsingClass
Private myReference As ReferenceClass
Public Property Reference As ReferenceClass
Get
return myReference
End Get
Set(value As ReferenceClass)
myReference = value
End Set
End Property
Public Sub New(ByVal Reference As ReferenceClass)
myReference = Reference
End Sub
End Class
Und dann verwenden Sie es so:
Public Class RuntimeOrSomething
Public Shared myReference As ReferenceClass
Public Shared ReadOnly Property Reference As ReferenceClass
Get
If myReference Is Nothing Then myReference = new ReferenceClass()
return myReference
End Get
End Property
Public Shared Function BooleanCheck() As Boolean
Reference.BooleanValue = True
Dim tempClass As New UsingClass(Reference)
tempClass.Reference.BooleanValue = False
Return (tempClass.Reference.BooleanValue = Reference.BooleanValue)
End Sub
Public Shared Sub DoNothing()
Reference.BooleanValue = True
Dim someBoolean As Boolean = BooleanCheck
' Now Reference.Booleanvalue is "False"
End Sub
End Class
Jetzt die Funktion BooleanCheck
wird immer zurückkehren true
obwohl die Referenz an die neue Klasse übergeben wird UsingClass
"nach Wert", nicht nach Referenz. Es wird also nicht eine Kopie der Klasse erstellt, sondern die lokale Variable myReference
en UsingClass
verweist noch auf die Eigenschaft Reference
en RuntimeOrSomething
.
Wie lässt sich das elegant erklären?