Mr *_*ubs 3 .net language-agnostic vb.net design-patterns
我的一个初级程序员创建了一个单身人士,但它表现得很奇怪:
我知道你不应该访问这样的对象,但是他们是这样做的,我无法解释为什么会发生这种情况 - 在调用remove实例之后,我在该行上放了一个断点,我仍然可以访问someObject对象及其属性.这种方式有意义,因为您访问mySingleton对象的引用,而不是myInstance,...正如您所看到的,我无法清楚地解释它,任何人都可以帮忙吗?
例如
Dim x As MySingleton = MySingleton.GetInstance()
x.someObject.int = 5
x.someObject.str = "hello"
Console.Out.WriteLine(x.someObject.int.ToString)
Console.Out.WriteLine(x.someObject.str.ToString)
MySingleton.RemoveInstance()
Console.Out.WriteLine(x.someObject.int.ToString) //still exists!
Console.Out.WriteLine(x.someObject.str.ToString) //still exists!
Run Code Online (Sandbox Code Playgroud)
这是单身人士的Psuedo代码:
Public Class MySingleton
Private Shared _myInstance As MySingleton
Public someObject As New Class1
Public Shared Function GetInstance() As MySingleton
If _myInstance Is Nothing Then
_myInstance = New MySingleton
End If
Return _myInstance
End Function
Public Shared Sub RemoveInstance()
_myInstance = Nothing
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
就个人而言,我不会像这样编写单例 - 我将实例对象作为一个单独的类.但每个人都是自己的.
这是因为您只删除MySingleton._myInstance
了对象的引用.
x
仍然有对该对象的引用.
编辑:
澄清:
它像是:
var A = new Class();
var B = A;
A = null;
// Here B still has that reference to the created object
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
101 次 |
最近记录: |