Referenzen in VB.NET

Etwas unklar sind für mich Verweise (Zeiger?) Auf Klassen in VB.NET. Die Frage, die ich stellen werde, kann durch ein wenig Testen beantwortet werden, aber ich habe mich gefragt, ob jemand eine anständige Erklärung (oder auch Links) posten kann.

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 benutze 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 FunktionBooleanCheck gibt immer @ zurütrue, obwohl die Referenz an die neue Klasse übergeben wirdUsingClass "nach Wert", nicht nach Referenz. Es wird also keine Kopie der Klasse erstellt, sondern die lokale VariablemyReference imUsingClass verweist noch auf die EigenschaftReference imRuntimeOrSomething.

Wie lässt sich das elegant erklären?

Antworten auf die Frage(12)

Ihre Antwort auf die Frage