如何丢失它的引用时对象实例

dyl*_*ert 1 c# destructor reference object

使用C#.

我有一个MainFoo类:

class MainFoo
{
    private Foo foo;

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

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

    public DoCurrentFoo()
    {
        this.foo.Do();
    }
}
Run Code Online (Sandbox Code Playgroud)

一个Foo类:

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

    public void Do() {}

    private void DoEnd() {}
}
Run Code Online (Sandbox Code Playgroud)

我希望能够DoEnd() 每次private Foo;重新初始化时调用Foo类中的方法.这个方法DoEnd()是私有的,我想保持这种方式(因此无法访问MainFoo).

由于同样的Foo get再次初始化,我虽然实例会松开它的引用,所以它会调用析构函数.但只有在MainFoo实例丢失引用时才会调用此方法.

问题:丢失引用时如何处置对象实例?

ale*_*lex 6

不保证在任何特定时间调用析构函数,甚至根本不调用析构函数.通常,您不应该依赖析构函数并且应该实现IDisposable并自己调用Dispose.

最方便的是,这可以完成using(...){ }.

回到你的样本,你也可以在财产分配上处理对象(如Jason Watkins建议的那样),但要确保它不会在其他任何地方使用.

public Foo F
{
    get{return foo;}
    set
    {
        if( foo != null)
            foo.Dispose();
        foo = value;
     }
}
Run Code Online (Sandbox Code Playgroud)