Различия в назначении обработчиков событий C #? - PullRequest
7 голосов
/ 25 августа 2009

Я всегда назначал обработчики событий подобным образом, руководствуясь автозаполнением Intellisense.

RangeSelector.RangeChanged += new EventHandler(RangeSelector_RangeChanged);

Я недавно заметил, что один из моих коллег делает это таким образом.

RangeSelector.RangeChanged += RangeSelector_RangeChanged;

Оба метода синтаксически верны, компилируются и ведут себя, как и ожидалось.

Каковы различия, преимущества или недостатки этих методов. Они приводят к одному и тому же IL-коду или есть какая-то небольшая разница, о которой мне нужно знать?

Ответы [ 4 ]

12 голосов
/ 25 августа 2009

Каковы различия, преимущества или недостатки этих методов.

Второй метод более новый, то есть он поддерживается только начиная с C # 2.0 (я полагаю), который добавил автоматическое преобразование из группы методов (то есть имени метода) в делегат. Таким образом, вызов конструктора добавляется компилятором, а второй метод является просто синтаксическим сахаром для первого.

Из-за этого между ними нет никаких других отличий.

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

3 голосов
/ 25 августа 2009

Результат одинаков в обоих случаях. Но в последнем компилятор C # будет выводить тип EventHandler из кода, тем самым сохраняя вам несколько нажатий клавиш.

3 голосов
/ 25 августа 2009

Без разницы, это приводит к тому же IL.

Это просто способ сказать то же самое с меньшим количеством кода.

2 голосов
/ 25 августа 2009

да, компилятор создает один и тот же код IL в обоих случаях, второй случай - просто синтаксис сахар

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