有和没有“新”的接线事件之间的区别

在C#中,这两行代码有什么区别(如果有的话)?

tmrMain.Elapsed += new ElapsedEventHandler(tmrMain_Tick); 

 tmrMain.Elapsed += tmrMain_Tick; 

两者似乎工作完全一样。 当你input后者时,C#是否假设你是指前者?

我做到了

 static void Hook1() { someEvent += new EventHandler( Program_someEvent ); } static void Hook2() { someEvent += Program_someEvent; } 

然后在代码上运行ildasm。
生成的MSIL是完全一样的。

所以要回答你的问题,是的,他们是一回事。
编译器只是推断你想要someEvent += new EventHandler( Program_someEvent );
– 你可以看到它在MSIL中创build新的EventHandler对象

它曾经是(.NET 1.x天)长forms是唯一的方法来做到这一点。 在这两种情况下,您正在创build一个委托指向Program_someEvent方法。

我不认为有任何区别。 当然resharper说第一行有冗余代码。

有点偏离主题:

你可以实例化一个委托(new EventHandler(MethodName))和(如果适用)重用该实例。

是不是new XYZEventHandler要求,直到C#2003年,你被允许省略C#2005中的冗余代码?

我认为一个真正的方法就是看代码生成的MSIL。趋向于一个很好的酸testing。

我有一个有趣的担心,它可能以某种方式与GC搞砸..似乎奇怪,如果不需要这样做,将会有所有宣布新的委托types的开销,你知道吗?