Пользовательский EventHandler против EventHandler <EventArgs> - PullRequest
63 голосов
/ 29 декабря 2011

Недавно мне стало интересно, есть ли существенная разница между этим кодом:

public event EventHandler<MyEventArgs> SomeEvent;

И этим:

public delegate void MyEventHandler(object sender, MyEventArgs e);
public event MyEventHandler SomeEvent;

Они оба делают одно и то же, и я имеюне смог сказать никакой разницы.Хотя я заметил, что большинство классов .NET Framework используют собственный делегат обработчика событий для своих событий.Есть ли конкретная причина для этого?

Ответы [ 2 ]

73 голосов
/ 29 декабря 2011

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

Причина, по которой многие классы .NET Framework имеют свои собственные делегаты обработчиков пользовательских событий, заключается в том, что они были написаны до обобщенных типовкоторый позволил сокращенный синтаксис) были введены в версии 2.0.Например, почти все библиотеки WinForms были написаны раньше, чем дженерики, а в те времена последняя форма была only способ делать вещи.

0 голосов
/ 20 декабря 2017

Второй способ дает большую гибкость и безопасность типов. Меньше методов с соответствующей сигнатурой => меньше места для ошибки. Пользовательский делегат позволяет указывать именно те параметры, которые вам нужны (или не указывать никого) - без отправителя + args Cargo Cult.

...