2014-10-01 130 views
0

我正在讀碼,有一個單獨的類是這樣的:一個單獨的類的構造函數被調用兩次

class Employee 
{ 
    public static readonly Employee Instance = new Employee(); 

    private Employee() 
    { 
     /* This messageBox shows different numbers */ 
     MessageBox.Show("Thread ID " + Thread.CurrentThread.ManagedThreadId); 
    } 
} 

這個類的構造函數被調用在相同的過程中兩次而不創建另一個域。構造函數中的messageBox顯示兩個不同的數字。有可能或者我錯了嗎?

注意:我在C++項目中託管我的可執行程序集,但沒有什麼不同,許多大型項目都正常工作。

+3

@ George87:小心解釋爲什麼?就我而言,這沒有問題。 – 2014-10-01 13:26:38

+0

他可以封裝員工實例,而不是允許直接訪問,但這應該不重要。你能在第一次嘗試獲得Employee實例的地方顯示代碼嗎? – M7Jacks 2014-10-01 13:37:33

+0

@ M7Jacks:像Employee.Instance。* – 2014-10-01 13:45:59

回答

-1

這解決了你的問題,但單獨實現的錯誤太多了。

class Employee 
{ 
    private static Employee _instance; 
    private static object syncRoot = new Object(); 

    public static Employee Instance 
    { 
     get 
     { 
      lock (syncRoot) 
      { 
       if (_instance != null) 
        _instance = new Employee(); 
      } 
      return _instance; 
     } 
    } 

    private Employee() 
    { 
     /* This messageBox shows different numbers */ 
     MessageBox.Show("Thread ID " + Thread.CurrentThread.ManagedThreadId); 
    } 
} 
+0

更新:)....... – christo 2014-10-01 13:49:45

+0

不,它不能解決我的問題。 :( – 2014-10-01 14:01:25

+0

OP的實現沒有任何問題,這增加了更多的工作/複雜性,根本沒有改變功能。 – Servy 2014-10-01 14:06:43

相關問題