EventHandler a = new EventHandler(control_RegionChanged);
EventHandler b = new EventHandler(control_RegionChanged);
if (a == b)
{
Console.WriteLine("Same!");
}
else
{
Console.WriteLine(a.GetHashCode() + " " + b.GetHashCode());
}
这写Same!
到控制台。
control.RegionChanged += new EventHandler(control_RegionChanged);
control.RegionChanged -= new EventHandler(control_RegionChanged);
这段代码执行后,是EventHandler
未注册?
是的;代表在实例上进行比较MethodInfo
;如果它们是相同的,那么它就会起作用。当尝试取消订阅匿名方法时就会出现问题;在这种情况下,您必须保留对委托的引用才能取消订阅。
So:
这可以:
control.SomeEvent += obj.SomeMethod;
//...
control.SomeEvent -= obj.SomeMethod;
但这风险更大:
control.SomeEvent += delegate {Trace.WriteLine("Foo");};
//...
control.SomeEvent -= delegate {Trace.WriteLine("Foo");};
使用匿名方法的正确过程是:
EventHandler handler = delegate {Trace.WriteLine("Foo");};
control.SomeEvent += handler;
//...
control.SomeEvent -= handler;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)