2013-04-01 125 views
1

使用C#。如何在丟失對象實例時處理對象實例

我有一個MainFoo類:

class MainFoo 
{ 
    private Foo foo; 

    public MainFoo() 
    { 
     this.foo = new Foo(); 
    } 

    public CreateNewFoo() 
    { 
     this.foo = new Foo(); 
    } 

    public DoCurrentFoo() 
    { 
     this.foo.Do(); 
    } 
} 

一個Foo類:

class Foo 
{ 
    ~Foo() 
    { 
     this.DoEnd(); 
    } 

    public void Do() {} 

    private void DoEnd() {} 
} 

我希望能夠調用的方法DoEnd()在富類每當private Foo;獲取的再次初始化。這種方法DoEnd()是私人的,我想保持它的方式(所以不能從MainFoo訪問)

由於同樣的Foo得到了初始化,我雖然實例會失去它的引用,所以它會調用析構函數。但是這隻有在MainFoo實例丟失​​參考時才被調用。

問題:如何丟棄對象實例時丟失它的引用?

回答

6

不保證在任何特定的時間調用析構函數,甚至根本不會調用析構函數。通常,您不應該依賴析構函數,而應該實現IDisposable並調用Dispose。

最方便的是,這可以用using(...){ }完成。回到你的樣本,你也可以在分配屬性時處置對象(如Jason Watkins所建議的那樣),但要確保它不在其他地方使用。

public Foo F 
{ 
    get{return foo;} 
    set 
    { 
     if(foo != null) 
      foo.Dispose(); 
     foo = value; 
    } 
} 
0

你不能,這是Garbage Collector的工作。

MSDN

在C#,垃圾收集是通過公共語言運行庫(CLR)具有類似功能到JVM的處理。 CLR垃圾回收器定期檢查內存堆是否有任何未引用的對象,並釋放這些對象所擁有的資源。