В расширении элемента управления Override или addHandler?

1

Я создал расширение для DataGrid. Я хотел бы знать, что лучше всего делать в случае.

Лучше ли добавить обработчик следующим образом:

class MyDataGrid : DataGrid {
    public MyDataGrid() {
        this.PreviewKeyDown+= MyDataGrid_PreviewKeyDown;
    }

    protected void MyDataGrid_PreviewKeyDown(/* args */) {/* do stuff */}
}

или с переопределением следующим образом:

class MyDataGrid : DataGrid {
    public MyDataGrid() { }
    protected override void OnPreviewKeyDown(/* args */) {/* do stuff */}
}

И если я позволю base.OnPreviewKeyDown(e); в переопределении он делает то же самое, что и eventHandler?

  • 0
    Да, оба они эквивалентны, если вы вызываете базовый метод из переопределенного метода.
  • 3
    Второй фрагмент лучше. Это заставляет вас думать о деталях, о которых вы еще не думали. Вы вызываете base.OnPreviewKeyDown () перед вашими "делами"? Или после? Или нет вообще? Хорошие шансы, что вы не знаете сейчас, потому что вы еще не думали об этом. Это имеет значение. Проблема с событием заключается в том, что вы не можете это исправить, если окажется, что оно имело значение.
Теги:
wpf

1 ответ

0
Лучший ответ

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

Если вы хотите быть строгим/фанатичным в отношении производительности, вы также можете сделать свой класс "MyDataGrid" "запечатанным".

sealed class MyDataGrid : DataGrid { ... }

Это позволяет компилятору/времени выполнения определить, что ему не нужно проверять наличие каких-либо переопределений виртуального метода "OnPreviewKeyDown" над классом "MyDataGrid".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню