我应该选择哪种代码来调用委托方法?

时间:2011-07-29 09:10:07

标签: c# delegates

要处理事件,我使用以下代码:

obj.Evt += new EvtEventHandler(DoEvt);

obj.Evt += DoEvt;

会得到相同的结果;

所以......请告诉我应该选择哪一个!为什么?

4 个答案:

答案 0 :(得分:4)

假设Evt被输入为EvtEventHandler,那么没有区别(除非你使用C#1.2,只有第一个存在)。

使用您想要的任何一种。

答案 1 :(得分:4)

没关系。在幕后,两种方式都是相同的(编译器生成相同的代码)。请参阅ECMA C#规范中的“13.6方法组转换”(您可以阅读here)。

答案 2 :(得分:3)

是的,他们的结果相同。但是,如果您使用的是1.01.1,则必须指定EvtEventHandler,对于以后的版本2.0以上,您可以摆脱它。

答案 3 :(得分:2)

对于IL,它们是相同的,

  IL_0020:  newobj     instance void [mscorlib]System.EventHandler::.ctor(object,
                                                                     native int)
  IL_0025:  callvirt   instance void ConsoleApplication15.A::DoEvt(class [mscorlib]System.EventHandler)

但我认为第一个对维护代码很有意义。