你的问题非常有趣,我不知道在C#中还有其他方法可以做到这一点,除了从实例内部强制从外部破坏它。这就是我想出的检查是否可能。您可以创建类 ,该类具有在计时器的特定间隔过后触发的事件。在事件中注册到该事件 () 的类将取消注册该事件,并将实例的引用设置为 。这就是我将如何做到这一点,经过测试并发挥作用。Foo
Bar
null
public class Foo
{
public delegate void SelfDestroyer(object sender, EventArgs ea);
public event SelfDestroyer DestroyMe;
Timer t;
public Foo()
{
t = new Timer();
t.Interval = 2000;
t.Tick += t_Tick;
t.Start();
}
void t_Tick(object sender, EventArgs e)
{
OnDestroyMe();
}
public void OnDestroyMe()
{
SelfDestroyer temp = DestroyMe;
if (temp != null)
{
temp(this, new EventArgs());
}
}
}
public class Bar
{
Foo foo;
public Bar()
{
foo = new Foo();
foo.DestroyMe += foo_DestroyMe;
}
void foo_DestroyMe(object sender, EventArgs ea)
{
foo.DestroyMe -= foo_DestroyMe;
foo = null;
}
}
为了测试这一点,您可以在窗体中设置一个按钮单击,如下所示,然后在调试器中检查它:
Bar bar = null;
private void button2_Click(object sender, EventArgs e)
{
if(bar==null)
bar = new Bar();
}
因此,下次单击该按钮时,您将能够看到该实例仍然存在,但其中的实例为空,尽管它已在 的构造函数中创建。Bar
Foo
Bar