gpt4 book ai didi

.net - 为什么会发生这种单例行为?

转载 作者:行者123 更新时间:2023-12-01 08:18:39 24 4
gpt4 key购买 nike

我的一个初级程序员创建了一个单例,但它的行为很奇怪:

我知道你不应该像这样访问对象,但他们就是这样做的,我无法解释为什么会发生这种情况 - 在调用 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!

这是单例的伪代码:
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

就我个人而言,我不会像这样编写我的单例 - 我将实例对象作为一个单独的类。但各有各的。

最佳答案

那是因为你只删除了MySingleton._myInstance对象的引用。
x仍然有对该对象的引用。

编辑:
澄清:

它像是:

var A = new Class();
var B = A;
A = null;
// Here B still has that reference to the created object

关于.net - 为什么会发生这种单例行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4144800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com