Я создал расширение для 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?
Это, вероятно, не имеет значения в любом случае. Тем не менее, вы должны переопределить метод - вся его цель - обработать событие изнутри элемента управления. Если вы добавляете обработчик событий, то вы ненужно добавляете другой метод в список вызовов событий (т.е. Незначительный удар производительности).
Если вы хотите быть строгим/фанатичным в отношении производительности, вы также можете сделать свой класс "MyDataGrid" "запечатанным".
sealed class MyDataGrid : DataGrid { ... }
Это позволяет компилятору/времени выполнения определить, что ему не нужно проверять наличие каких-либо переопределений виртуального метода "OnPreviewKeyDown" над классом "MyDataGrid".