C# 中,这两行代码有什么区别(如果有的话)?
tmrMain.Elapsed += new ElapsedEventHandler(tmrMain_Tick);
和
tmrMain.Elapsed += tmrMain_Tick;
两者看起来完全一样,C#是不是默认你在输入后者时实际上指的是前者?
C# 中,这两行代码有什么区别(如果有的话)?
tmrMain.Elapsed += new ElapsedEventHandler(tmrMain_Tick);
和
tmrMain.Elapsed += tmrMain_Tick;
两者看起来完全一样,C#是不是默认你在输入后者时实际上指的是前者?
我做了这个。
static void Hook1()
{
someEvent += new EventHandler( Program_someEvent );
}
static void Hook2()
{
someEvent += Program_someEvent;
}
然后在代码上运行ildasm。
生成的MSIL完全相同。
所以回答你的问题,是的它们是同一件事。
编译器只是推断你想要someEvent += new EventHandler( Program_someEvent );
-- 你可以在MSIL中看到它在两种情况下都创建了新的EventHandler
对象。
在以前的.NET 1.x版本中,只有使用长形式才能实现这个功能。在两种情况下,您都需要新建一个委托来指向Program_someEvent方法。
我认为这两种写法没有什么区别。当然,Resharper会指出第一行代码是多余的。
有点偏题:
您可以实例化一个委托 (new EventHandler(MethodName))
并(如果适用)重复使用该实例。
在C#2003之前不是需要使用new XYZEventHandler
吗?而在C#2005中,你可以省略冗余的代码,对吧?
我认为真正判断的方法是查看代码生成的 MSIL.. 这往往是一个很好的酸性测试..
我有一些有趣的担忧,它可能会与 GC 产生冲突.. 如果不需要以这种方式完成,声明新委托类型的所有开销似乎都很奇怪,你知道吗?