我希望用匿名委托和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();
}
但是我只是从事件中删除动态创建的方法更有趣。希望有人可以为我阐明这一点。谢谢!