我认为这是一个C#初学者的问题,但是我似乎找不到正确的解决方案。
我有一个ClassOne对象,它定义了一个事件。我创建了一个ClassTwo对象,它被视为黑盒子,也就是说,我不知道它是否会注册任何事件。 ClassTwo的构造函数注册到ClassOne的事件。问题在于,当ClassTwo对象超出范围时,垃圾收集器从未删除此对象,因为它从未注销事件。
所以我有两个问题:
有没有一种方法让ClassTwo对象知道它何时超出范围? 对于旧的C++程序员来说,这将在析构函数中实现,但是在C#中,这种方式行不通。
是否有一种调试工具可以帮助我查找此类对象?
以下是重现此问题的示例代码:
public partial class MainWindow : Window
{
static public ClassOne classOne = new ClassOne();
public MainWindow()
{
InitializeComponent();
ClassTwo classtwo = new ClassTwo();
}
private void buttonTest_Click(object sender, RoutedEventArgs e)
{
GC.Collect();
}
}
public class ClassOne
{
public ClassOne()
{
Trace.WriteLine(this + " constructor");
}
~ClassOne()
{
Trace.WriteLine(this + " destructor");
}
public delegate void UpdateFunc(object sender, EventArgs args);
public event UpdateFunc OnUpdate;
}
public class ClassTwo
{
public ClassTwo()
{
Trace.WriteLine(this + " constructor");
MainWindow.classOne.OnUpdate += new ClassOne.UpdateFunc(classOne_OnUpdate);
}
void classOne_OnUpdate(object sender, EventArgs args)
{
throw new NotImplementedException();
}
~ClassTwo()
{
Trace.WriteLine(this + " destructor");
}
}
IDisposable
? - Brad Christie