C#为什么我在订阅活动时会使用“new”关键字?
订阅以下两种订阅方式有什么区别?
receiver.ConfigChanged += Config_ConfigChanged; receiver.ConfigChanged += new EventHandler(Config_ConfigChanged);
似乎它们都以相同的方式工作,但如果是这样,那么使用第二种方法有什么意义呢?
如果取消订阅,以下两种方法的工作方式是否相同?
receiver.ConfigChanged -= Config_ConfigChanged; receiver.ConfigChanged -= new EventHandler(Config_ConfigChanged);
详细的方式适用于所有版本的C#,这只是C#2及更高版本的简短方法。 所以我认为现在没有理由使用漫长的道路。
在某些情况下,您仍然需要使用new DelegateType(methodGroup)
,但事件订阅不是其中之一。 这些情况通常涉及generics类型推断或方法重载。
取消订阅将以任何方式工作,因为它基于值相等而不是引用相等。 如果我没记错,从方法组隐式转换和显式new
get转换为相同的IL代码。 隐式转换只是语法糖。
无论您使用的是哪种版本的框架,Visual Studio的TAB事件自动完成始终默认为.Net 1.0的处理方式。 你可能会发现一些习惯于阅读旧方式的人。 我只是通过使用Resharper遇到了不那么冗长的方式!
这是关于事件订阅的MSDN文章 – 它确切地说明了@CodeInChaos刚刚确认的内容: http : //msdn.microsoft.com/en-us/library/ms366768%28v=vs.80%29.aspx
如果我错了,请纠正我,但我不知道这是否有效
receiver.ConfigChanged += new EventHandler(Config_ConfigChanged); receiver.ConfigChanged -= new EventHandler(Config_ConfigChanged);
由于这些是两个不同的实例,我认为这样做
var configChanged = new EventHandler(Config_ConfigChanged); receiver.ConfigChanged += configChanged; receiver.ConfigChanged -= configChanged;
但话说回来,为什么不用它
receiver.ConfigChanged += Config_ConfigChanged; receiver.ConfigChanged -= Config_ConfigChanged;
好的
receiver.ConfigChanged -= Config_ConfigChanged;
将清除所有引用该方法的事件处理程序。
var eventHandler = new EventHandler(Config_ConfigChanged); receiver.ConfigChanged += eventHandler; receiver.ConfigChanged += new EventHandler(Config_ConfigChanged); receiver -= eventHandler;
只会清除一个eventHandler。
如果您不关心跟踪处理程序,则使用详细的方法。