我的理解是,在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才能收集垃圾.