首页 / 知识

关于c#:有和没有“新”的接线事件之间的区别

2023-04-13 04:01:00

关于c#:有和没有“新”的接线事件之间的区别

Difference between wiring events with and without “new”

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

1
tmrMain.Elapsed += new ElapsedEventHandler(tmrMain_Tick);

1
tmrMain.Elapsed += tmrMain_Tick;

两者似乎工作完全相同。 当您键入后者时,C#只是假设您是指前者吗?


我做了这个

1
2
3
4
5
6
7
8
9
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方法。


有点题外话:

您可以实例化委托(new EventHandler(MethodName))并(如果合适)重用该实例。


我认为没有任何区别。当然,resharper表示第一行具有冗余代码。


new XYZEventHandler直到C#2003才需要,并且允许您省略C#2005中的冗余代码吗?


我认为真正说明问题的一种方法是查看为代码生成的MSIL。倾向于进行良好的酸性测试。

我有一个有趣的担忧,即它可能会与GC混为一谈。似乎很奇怪,如果永远不需要用这种方法来声明新的委托类型,那将产生所有开销。


事件接线之间区别

最新内容

相关内容

热门文章

推荐文章

标签云

猜你喜欢