c# – 你需要“不知道”一个匿名函数/ lambda

前端之家收集整理的这篇文章主要介绍了c# – 你需要“不知道”一个匿名函数/ lambda前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的理解是,在C#中连接的任何事件处理程序都需要这样做.
Object myObject = new Object();
myObject.Event += EventHandler; //Wired
myObject.Event -= EventHandler; //Unwired

但是,您是否需要拒绝以下代码?如果是,怎么样?

Object myObject = new Object();
myObject.Event += (object sender,EventArgs e) => { }; //Wired
myObject.Event -= ????? //Unwire? How?

我的假设是否定的?

解决方法

是的,你需要(*),你需要这样做:
Object myObject = new Object();
EventHandler handler = (object sender,EventArgs e) => { };
myObject.Event += handler; //Wired
myObject.Event -= handler; //Unwired

请参阅here以获得解释.

(*)
垃圾收集不需要这样做.你需要这样做,如果你不想让事件再调用你的处理程序.

更新:
澄清一下:
唯一的原因,为什么你想不想要一个事件处理程序是定义事件处理程序的对象可以被垃圾回收.
想想下面的例子:

>你有一个PowerSource类与事件BlackOut.
>你有一个LightBulb类,只要有权力就可以了.它有一个方法ConnectToPowerSource.此方法订阅所提供的PowerSource的BlackOut事件.
>您有一个包含灯泡的集合

现在,从列表中删除一个灯泡将不会使其收集垃圾,因为PowerSource仍然在其BlackOut事件中引用LightBulb实例.只有在从BlackOut事件中注销LightBulb之后,LightBulb才能收集垃圾.

猜你在找的C#相关文章