在 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 );
-- 你可以看到它创建了新的 EventHandler MSIL 中两种情况下的对象

其他提示

过去(.NET 1.x 时代)长格式是唯一的方法。在这两种情况下,您都将新建一个委托以指向 Program_someEvent 方法。

我认为没有什么区别。当然,resharper 说第一行有冗余代码。

有点题外话:

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

不是吗 new XYZEventHandler require 直到C#2003,而在C#2005 中允许省略冗余代码?

我认为真正判断的一种方法是查看为代码生成的 MSIL。往往是一个很好的酸测试..

我有一个有趣的担心,它可能会以某种方式扰乱 GC..如果不需要以这种方式完成声明新委托类型的所有开销,这似乎很奇怪,你知道吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top