我希望通过匿名委托和 lambda 表达式来清除一些事情,这些表达式用于在 C# 中为事件处理程序创建一个方法,至少对我自己而言。
假设我们有一个添加匿名委托或 lambda 表达式的事件(对于可以使用较新版本 .NET 的幸运人群)。
SomeClass.SomeEvent += delegate(object o, EventArg e) { /* do something */ };
我读到过去人们已经忘记了仍然具有阻止类被垃圾收集的处理程序的事件。如果不只是在类中将 SomeEvent 设置为 null ,将如何删除添加的处理程序。以下不是一个全新的处理程序吗?
SomeClass.SomeEvent -= delegate(object o, EventArg e) { /* do something */ };
我可以看到将匿名委托或 lambda 表达式存储在变量中。但是,至少对我来说,这似乎违背了能够简单而简洁地添加事件处理程序的整个目的。
SomeEventDelegate handler = new SomeEventDelegate(delegate(object o, EventArg e) { /* do something */ });
SomeClass.SomeEvent += handler;
// ... stuff
SomeClass.SomeEvent -= handler;
再说一次,我明白你可以这样做......
public override Dispose(bool disposing)
{
_someEvent = null;
this.Dispose();
}
但我更有趣的是从事件中删除动态创建的方法。希望有人可以为我阐明这一点。谢谢!