我的理解是,在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才能收集垃圾.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。