Bog*_*SFT 4 .net c# events anonymous-methods
C#2.0有一个称为匿名函数的简洁功能.这主要用于事件:
Button.Click += delegate(System.Object o, System.EventArgs e)
{ System.Windows.Forms.MessageBox.Show("Click!"); };
Run Code Online (Sandbox Code Playgroud)
现在,假设Button是一个静态成员,那么向其添加委托将被视为非托管资源.通常,我必须在再次对其进行regestring之前取消注册该处理程序.这是GUI编程的一个非常常见的用例.
匿名函数有哪些指导原则?框架是否自动取消注册?如果是的话,何时?
不,匿名函数不会自动取消注册.如果事件不应在应用程序的整个生命周期中连接,您应该确保自己完成.
当然,要执行此操作,您必须存储委托引用,以便能够取消注册它.就像是:
EventHandler handler = delegate(System.Object o, System.EventArgs e)
{ System.Windows.Forms.MessageBox.Show("Click!"); };
Button.Click += handler;
// ... program code
Button.Click -= handler;
Run Code Online (Sandbox Code Playgroud)
另外,请看这个问题.