c#为什么我要使用&;new&;在订阅事件时使用关键字

本文关键字:事件 关键字 为什么 new 我要 | 更新日期: 2023-09-27 18:11:03

以下两种订阅事件的方式有什么区别?

receiver.ConfigChanged += Config_ConfigChanged;
receiver.ConfigChanged += new EventHandler(Config_ConfigChanged);

似乎它们都以相同的方式工作,但如果是这样,使用第二个的意义是什么?

取消订阅呢?以下两种方法的工作方式是否相同?

receiver.ConfigChanged -= Config_ConfigChanged;
receiver.ConfigChanged -= new EventHandler(Config_ConfigChanged);

c#为什么我要使用&;new&;在订阅事件时使用关键字

详细方式适用于所有版本的c#,简短方式只适用于c# 2及以后的版本。所以我认为现在没有理由走长途。

在某些情况下,您仍然需要使用new DelegateType(methodGroup),但事件订阅不是其中之一。这些情况通常涉及泛型类型推断或方法重载。

取消订阅都可以,因为它基于值相等,而不是引用相等。如果我没有记错的话,从方法组的隐式转换和显式new都被翻译成相同的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;

Ok so

receiver.ConfigChanged -= Config_ConfigChanged;

将清除所有引用该方法的事件处理程序。

var eventHandler = new EventHandler(Config_ConfigChanged); 
receiver.ConfigChanged += eventHandler;
receiver.ConfigChanged += new EventHandler(Config_ConfigChanged); 
receiver -= eventHandler;

只会清除一个eventandler。

如果您不关心跟踪处理程序,则使用冗长的方式。