我以前沒有使用過單身人士,所以也許我有完全錯誤的想法,但我認爲重點是它只能初始化一次,任何人調用它都會引用相同的實例..?單身人士多次初始化
所以我從一個例子中拿出了這個。 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
編輯:
看來的「新建」子引發許多呼叫Program.GetInstance的,第一個完成之前。這是由於我早些時候在這個類中擁有大量共享公共對象,因爲該類是單身人士,所以不再共享。這些對象在初始化時調用Program類以引用其他對象。
看起來對我來說很合適。 –
如果'Prog'一直在不斷被重新使用,那麼將它設置爲'Nothing'?不應該'Program'類也有一個私有構造函數,所以實例化它的唯一方法是通過'GetInstance()'? – Jodrell
喬恩Skeet關於單身人士的文章是一個很好的參考:http://csharpindepth.com/Articles/General/Singleton.aspx –