我以前没有使用过单例,所以也许我有完全错误的想法,但我认为关键是它只能初始化一次,任何调用它的人都会引用同一个实例..?
所以我从一个例子中得到了这个。GetInstance() 在我的程序中从数百个不同的地方被调用,当我调试时,“Prog = New Program”这一行不断受到每个调用的影响。我认为这正是不应该发生的事情。或者我有一些基本的误解?
' ********************** THREAD SAFE SINGLETON **************************
Public Class Program
Private Shared Prog As Program = Nothing
Private Shared ReadOnly singletonLock As New Object()
Public Shared Function GetInstance() As Program
SyncLock singletonLock
If Prog Is Nothing Then
Prog = New Program
End If
Return Prog
End SyncLock
End Function
编辑:
在第一个完成之前,“New”子似乎触发了对 Program.GetInstance 的多次调用。这是因为我之前在这个类中有很多共享的公共对象,因为这个类是单例的,所以它们不再共享。这些对象在初始化时会调用 Program 类以引用它的其他对象。