Подтвердить что ты не робот

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

Я создаю подкласс 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);
    }
}

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

4b9b3361

Ответ 1

Если вы действительно специализируетесь на кнопке, имеет смысл переопределить OnClick. Если вы на самом деле меняете то, что происходит при нажатии кнопки, я бы не стал подклассом Button в первую очередь - я бы просто добавил обработчики событий.

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

Ответ 2

Всегда переопределять OnClick при наследовании. Это дает вам лучшую производительность.

Ответ 3

На самом деле есть одно преимущество привязки обработчика события к переопределению метода. Обработчик событий частный, а ваш переопределенный метод должен быть защищен с предопределенным именем. Если вы используете инструменты обфускации/шифрования для защиты вашего приложения, ваш код более доступен, когда он protected override, чем когда private.

Ответ 4

Для щелчка кнопки я бы сохранил его как метод для чтения. Но я думаю, что это личное предпочтение. Мне было бы интересно узнать, что такое консенсус.