提问人:Blorgbeard 提问时间:8/26/2008 最后编辑:nawfalBlorgbeard 更新时间:7/7/2014 访问量:3540
有和没有“新”的接线事件之间的区别
Difference between wiring events with and without "new"
问:
在 C# 中,这两行代码之间有什么区别(如果有的话)?
tmrMain.Elapsed += new ElapsedEventHandler(tmrMain_Tick);
和
tmrMain.Elapsed += tmrMain_Tick;
两者的工作方式似乎完全相同。C# 在键入后者时是否只是假设您指的是前者?
答:
26赞
Orion Edwards
8/26/2008
#1
我做到了
static void Hook1()
{
someEvent += new EventHandler( Program_someEvent );
}
static void Hook2()
{
someEvent += Program_someEvent;
}
然后对代码运行 ildasm。
生成的 MSIL 完全相同。
所以要回答你的问题,是的,它们是一回事。
编译器只是推断你想要的
-- 你可以看到它在 MSIL 中这两种情况下都创建了新对象someEvent += new EventHandler( Program_someEvent );
EventHandler
2赞
Ray
8/26/2008
#2
我不认为有什么区别。当然,resharper 说第一行有冗余代码。
-1赞
Rob Cooper
8/26/2008
#3
我认为真正判断的一种方法是查看为代码生成的 MSIL。往往是一个很好的酸性测试。.
我有一种有趣的担心,它可能会以某种方式扰乱 GC..如果不需要以这种方式声明新的委托类型,那么声明新的委托类型的所有开销似乎很奇怪,你知道吗?
0赞
Timbo
8/26/2008
#4
直到 C#2003 才有要求,并且允许您省略 C#2005 中的冗余代码吗?new XYZEventHandler
5赞
denis phillips
8/26/2008
#5
过去(.NET 1.x 天)长格式是唯一的方法。在这两种情况下,您都会新建一个委托以指向 Program_someEvent 方法。
2赞
Andrei Rînea
8/26/2008
#6
有点跑题了:
您可以实例化委托并(如果适用)重用该实例。(new EventHandler(MethodName))
上一个:委托和事件之间有什么区别?
下一个:调用跨线程事件的最简洁方式
评论