我为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 :(得分:0)
这两种方式都无关紧要。也就是说,你应该覆盖方法 - 它的全部目的是从控件中处理事件。如果你添加一个事件处理程序,那么你不必要地在事件的调用列表中添加另一个方法(即,轻微的性能命中)。
如果你想对性能严格/狂热,那么你也可以让你的“MyDataGrid”类“密封”。
sealed class MyDataGrid : DataGrid { ... }
这允许编译器/运行时确定它不需要检查“MyDataGrid”类上方的虚拟方法“OnPreviewKeyDown”的任何覆盖。