在C#中,这两行代码之间有什么区别(如果有的话)?
tmrMain.Elapsed += new ElapsedEventHandler(tmrMain_Tick);
和
tmrMain.Elapsed += tmrMain_Tick;
两者看起来完全相同。当你输入后者时,C#是否只是假设你是指前者?
答案 0 :(得分:26)
我做了这个
static void Hook1()
{
someEvent += new EventHandler( Program_someEvent );
}
static void Hook2()
{
someEvent += Program_someEvent;
}
然后在代码上运行ildasm 生成的MSIL完全相同。
所以回答你的问题,是的,他们是一回事
编译器只是推断你想要someEvent += new EventHandler( Program_someEvent );
- 您可以在MSIL
EventHandler
对象
答案 1 :(得分:4)
过去(.NET 1.x天),长形式是唯一的方法。在这两种情况下,您都在新建一个委托以指向Program_someEvent方法。
答案 2 :(得分:2)
我认为没有任何区别。当然resharper说第一行有冗余代码。
答案 3 :(得分:2)
有点偏离主题:
您可以实例化委托(new EventHandler(MethodName))
并(如果适用)重用该实例。
答案 4 :(得分:0)
在C#2003之前,new XYZEventHandler
是否需要,并且您被允许省略C#2005中的冗余代码?
答案 5 :(得分:-1)
我认为真正告诉的一种方法是查看为代码生成的MSIL。趋向于进行良好的酸性测试..
我有一些有趣的担忧,它可能会以某种方式混淆GC。似乎奇怪的是,如果它永远不需要以这种方式完成,那么会声明新委托类型的所有开销,你知道吗?