C#为什么我在订阅活动时会使用"new"关键字?

kma*_*mur 4 .net c# events delegates

订阅2种订阅方式有什么区别?

receiver.ConfigChanged += Config_ConfigChanged;

receiver.ConfigChanged += new EventHandler(Config_ConfigChanged);
Run Code Online (Sandbox Code Playgroud)

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

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

receiver.ConfigChanged -= Config_ConfigChanged;

receiver.ConfigChanged -= new EventHandler(Config_ConfigChanged);
Run Code Online (Sandbox Code Playgroud)

Cod*_*aos 12

详细的方式适用于所有版本的C#,这只是C#2及更高版本的简短方法.所以我认为现在没有理由使用漫长的道路.

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

取消订阅将以任何方式工作,因为它基于值相等而不是引用相等.如果我没记错,从方法组隐式转换和显式newget转换为相同的IL代码.隐式转换只是语法糖.