Использование обработчиков событий против переопределения методов запуска событий
Я создаю подкласс Button и хотел бы добавить пользовательские функции к некоторым из его событий, таких как OnClick. Какой из них более желательный? Я переопределяю OnClick:
protected override void OnClick(EventArgs e)
{
base.OnClick(e);
doStuff();
}
или я должен вместо этого связать событие OnClick с обработчиком событий, определенным в моем подклассе Button, через конструктор?
class ButtonSubclass
{
public ButtonSubclass() : base()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.Click += new System.EventHandler(this.ButtonSubclass_Click);
}
}
Изменить. Я добавил незначительные визуальные изменения (которые могут проходить как рудиментарные скиннинг), но большинство изменений относятся к обработчикам событий, которые я не хочу повторять (копировать-вставить) на каждая форма, которая его повторно использует.
Ответы
Ответ 1
Если вы действительно специализируетесь на кнопке, имеет смысл переопределить OnClick
. Если вы на самом деле меняете то, что происходит при нажатии кнопки, я бы не стал подклассом Button
в первую очередь - я бы просто добавил обработчики событий.
EDIT: просто чтобы дать немного больше идеи - если вы хотите добавить похожие обработчики событий для нескольких кнопок, достаточно просто написать способ утилиты для этого и вызвать его из нескольких мест. Это не требует фактического подкласса. Это не означает, что подкласс определенно ошибочно в вашем случае, конечно - просто дает вам дополнительные опции:)
Ответ 2
Всегда переопределять OnClick при наследовании. Это дает вам лучшую производительность.
Ответ 3
На самом деле есть одно преимущество привязки обработчика события к переопределению метода. Обработчик событий частный, а ваш переопределенный метод должен быть защищен с предопределенным именем. Если вы используете инструменты обфускации/шифрования для защиты вашего приложения, ваш код более доступен, когда он protected override
, чем когда private
.
Ответ 4
Для щелчка кнопки я бы сохранил его как метод для чтения. Но я думаю, что это личное предпочтение. Мне было бы интересно узнать, что такое консенсус.