在Control扩展,Override或addHandler?

时间:2014-11-14 19:13:16

标签: c# wpf

我为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一样?

1 个答案:

答案 0 :(得分:0)

这两种方式都无关紧要。也就是说,你应该覆盖方法 - 它的全部目的是从控件中处理事件。如果你添加一个事件处理程序,那么你不必要地在事件的调用列表中添加另一个方法(即,轻微的性能命中)。

如果你想对性能严格/狂热,那么你也可以让你的“MyDataGrid”类“密封”。

sealed class MyDataGrid : DataGrid { ... }

这允许编译器/运行时确定它不需要检查“MyDataGrid”类上方的虚拟方法“OnPreviewKeyDown”的任何覆盖。