В чем разница в назначении события ... правильный метод? - PullRequest
0 голосов
/ 29 января 2009

Можете ли вы сказать мне, в чем разница между этими методами присоединения обработчика событий?

//Method 1
this.button4.Click += new RoutedEventHandler(button4_Click);

//Method 2
this.button4.Click += button4_Click;

...

void button4_Click(object sender, RoutedEventArgs e) { }

Ответы [ 3 ]

3 голосов
/ 29 января 2009

Как говорит Антон, разницы нет.

Так же, как немного больше фона, это не относится к событиям. Это всего лишь одно использование функции в C # 2.0, которая заключается в неявном преобразовании групп методов в делегаты. Таким образом, вы можете использовать его так же, как это:

EventHandler handler = button4_click;

Еще одно изменение делегатов в C # 2.0 заключается в том, что они теперь являются вариантами - это означает, что (например) вы можете использовать метод, объявленный с подписью EventHander, в качестве MouseEventHandler:

MouseEventHandler handler = button4_click;

Тогда, конечно, есть анонимные методы, но это совершенно другая игра :)

1 голос
/ 29 января 2009

Это действительно синтаксический сахар (компилируется в идентичный CIL)

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

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

Как всегда, это баланс в отношении того, какой pro / con более полезен в текущей ситуации

1 голос
/ 29 января 2009

Никакой разницы - второй - это просто синтаксический шугар, добавленный в C # 2.0. А в C # 3.0 лямбды еще более лаконичны.

...