Какой код я должен выбрать для вызова метода делегата? - PullRequest
0 голосов
/ 29 июля 2011

Для обработки события я использую код, приведенный ниже:

obj.Evt += new EvtEventHandler(DoEvt);

или

obj.Evt += DoEvt;

даст тот же результат;

Итак ... Пожалуйста, скажите мне, какой я должен выбрать! И почему?

Ответы [ 4 ]

4 голосов
/ 29 июля 2011

Это не имеет значения.За кулисами оба пути одинаковы (компилятор генерирует один и тот же код).См. «13.6 Преобразование групп методов» в спецификации ECMA C # (ее можно прочитать здесь ).

4 голосов
/ 29 июля 2011

Если предположить, что Evt напечатано как EvtEventHandler, то нет никакой разницы (если вы не используете C # 1.2, где существует только первое).

Используйте все, что захотите.

3 голосов
/ 29 июля 2011

Да, они дают одинаковый результат.однако, если вы используете 1.0 или 1.1, вы должны указать EvtEventHandler, для более поздних версий 2.0 и выше вы можете избавиться от него.

2 голосов
/ 29 июля 2011

Для ИЛ они одинаковы,

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

Но я думаю, что первое имеет смысл для поддержки вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...