对于我来说,VB.NET 中类的引用(指针?)还有一些不太清楚。我即将要问的问题可以通过一些测试来回答,但我想知道是否有人能够发布一个合理的解释(或链接)。
如果您创建了一个类:
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
然后是一个将这个类作为属性使用的实际类:
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
然后像这样使用:
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
现在,即使将引用按“按值”方式传递给新类UsingClass,函数BooleanCheck也始终返回true。因此,不会创建类的副本,但是UsingClass中的局部变量myReference仍然引用/指向RuntimeOrSomething中的属性Reference。如何优雅地解释这一点呢?
Object
,那么由于某种原因,VB.NET 将存储对对象副本的引用,而不是对原始对象的引用。 - supercat