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

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

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

4 ответа

Решение

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

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

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

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

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

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

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

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

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

Р.П.

Это отделяет звонящего от звонящего.

Другие вопросы по тегам