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

时间:2013-04-01 16:29:56

标签: c# object reference destructor

使用C#。

我有一个MainFoo类:

class MainFoo
{
    private Foo foo;

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

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

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

A Foo类:

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

    public void Do() {}

    private void DoEnd() {}
}

每当DoEnd()再次初始化时,我希望能够在Foo 类中调用方法private Foo; 。此方法DoEnd()是私有的,我希望保持这种方式(因此无法从MainFoo访问)

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

问题:如何丢失对象实例的引用?

2 个答案:

答案 0 :(得分:6)

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

最方便的是,可以使用using(...){ }完成此操作。

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

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

答案 1 :(得分:0)

你做不到,这是Garbage Collector的工作。

来自MSDN

  

在C#中,垃圾收集由公共语言运行库(CLR)处理,其功能与JVM的功能类似。 CLR垃圾收集器定期检查内存堆中是否有任何未引用的对象,并释放这些对象持有的资源。