2010-03-05 37 views
3

我有兩個類ClassA和ClassB都具有對單例對象ClassHelper的引用。我的問題是我應該如何處置的單項對象,一旦即時通訊使用的兩個ClassA和ClassB的做在.NET中處理單例對象

編輯:

public ClassA 
{ 
    CHelper obj; 

    public ClassA() 
    { 
    obj = obj.GetInstance("Initialise"); 
    obj.CallFuncA(); 
    } 
} 

On the same lines 
public ClassB 
{ 
    CHelper obj; 

    public ClassB() 
    { 
    obj = obj.GetInstance("Initialise"); 
    obj.CallFuncB(); 
    } 
} 


where 

CHelper 
{ 
    private static sm_CHelper; 

    public static GetInstance(string strInitialise) 
    { 
     if(sm_CHelper == null) 
     { 
     sm_CHelper = new CHelper(strInitialise); 
     } 
    } 

    private CHelper(string strInitialise) 
    { 
     //do something here 
    } 

    public CallFuncA() 
    { 
    // do something here 
    } 
    public CallFuncB() 
    { 
    // do something here 
    } 
} 

問候 學習者

+0

我覺得單身物品不應該丟棄。但是,如果您要處置它們,您可能需要添加更多信息(甚至可能是代碼段),以便您可以獲得更好的答案。例如,ClassA和B在單獨的線程上執行? – Kane 2010-03-05 07:12:12

+0

類似問題 http://stackoverflow.com/questions/463716/singleton-with-finalizer-but-not-idisposable http://stackoverflow.com/questions/225686/disposable-singleton-in-c – PRR 2010-03-05 09:41:53

回答

1

,如果你正在談論的模式singelton然後你不應該放棄它....如果你不指向singelton模式,那麼你可以嘗試使用解構器來運行你的配置邏輯。

0

該單身人士應該在申請期間保持活躍狀態​​。所以在處理那些ClassA和ClassB時不應該處理它。

0

我從來沒有見過這樣的例子。我可能會做這樣的事情:

class Resource { 

    static Resource Instance = new Resource(); 
    static int count = 2; 

    public Resource CheckOut() { 
     if (--count <= 0) 
      Instance = null; 
     return Instance; 
    } 
} 

這種方式,既後的ClassA和ClassB檢出資源,靜態參考停止圍繞保持它。在ClassA和ClassB失去對資源的引用之後,終結器會被稱爲下一輪垃圾回收。