Шаблон подписи события в .net - PullRequest
       10

Шаблон подписи события в .net

5 голосов
/ 29 октября 2008

Какой смысл в стандартном шаблоне для делегатов событий в .net? То есть EventHandler предопределенный делегат? Почему бы просто не выбрать наиболее подходящую подпись для требования?

Редактировать: И более того, необходимо ли во всех случаях рабски следовать примеру Microsoft?

Ответы [ 4 ]

4 голосов
/ 29 октября 2008

В C # 1.0 соглашение не имело большого смысла. В C # 2.0, где существует определенное количество дисперсий делегатов, это имеет больше смысла.

Если у вас есть метод обработки событий, который на самом деле не заботится о параметрах, например,

public void SaveDocument(object sender, EventArgs args)
{
    // Save the document here
}

теперь вы можете использовать этот метод для подписки на любое событие, которое следует за соглашением, даже если фактический отправитель или аргументы введены более строго. Это означает, что вы можете использовать один и тот же обработчик для события клавиатуры, нажатия кнопки и т. Д.

3 голосов
/ 29 октября 2008

Это главным образом для согласованности и управления версиями - с параметром sender как всегда System.Object и параметром args как всегда System.EventArgs или его классом с откатом, вы можете изменить передаваемый ему аргумент отправителя как а затем измените тип EventArgs, не нарушая существующий код.

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

3 голосов
/ 29 октября 2008

Это хороший вопрос. Еретично, но хорошо. Недавно я прочитал пост в блоге (я не могу найти ссылку - есть ли у кого-нибудь эта ссылка), который развенчал миф о том, что вам нужно всегда переопределять System.EventArgs для обеспечения хорошей обработки событий.

Я все за соглашение и следую правилам, но я думаю, что это то, что можно смирить - если не избежать. Необходимость постоянно переопределять System.EventArgs для каждого события добавляет к связыванию подпрограммы - теперь есть еще одна вещь, которую нужно отслеживать.

Наличие «e», которое предоставляет члены, не более полезно или интуитивно понятно, чем хорошо названный набор аргументов. Я не думаю, что аргумент может быть выигран для отправки рекомендованного шаблона System.EventArg, но я бы посоветовал вам сделать этот аргумент.

гр

2 голосов
/ 29 октября 2008

Отсоединяет абонента от вызываемого.

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