使用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
实例丢失引用时才会调用此方法。
问题:如何丢失对象实例的引用?
答案 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垃圾收集器定期检查内存堆中是否有任何未引用的对象,并释放这些对象持有的资源。