我应该创建一个新方法来处理事件或覆盖基本方法吗?

王凯越*_*ang 5 c# events event-handling uielement uwp

在使用UIElementC#编写UWP程序时,我正在使用从类派生的类,其中我想要包括处理输入控件,如鼠标和键盘操作.现在我看到已经有虚拟方法OnSomeEvent()说明了我可以覆盖这些方法以适应我的处理过程,或者我可以创建处理基类中定义的公共事件的新方法,并在构造函数中将它们订阅到这些输入事件.我认为这两种方法都有效但我希望知道哪种方法更专业或更明智,以及为什么.此外,它有助于解释为什么MS同时提供这两种方式.

这是UIElementhttps://msdn.microsoft.com/en-us/library/system.windows.uielement(v=vs.110).aspx#Examples的事件和方法.

和一段引用

UIElement为元素布局特征提供了一个起点,并且还公开了派生类可以覆盖的虚拟方法,这些方法可以影响元素及其子元素的布局呈现行为.通常,元素的大部分输入和聚焦行为也在UIElement类中定义.这包括键盘,鼠标和手写笔输入的事件以及相关的状态属性.其中许多事件都是路由事件,许多与输入相关的事件都有冒泡路由版本以及事件的隧道版本.这些配对事件通常是控制作者最感兴趣的事件.

Pat*_*man 1

在派生类中,我通常重写现有方法。

为什么?事件处理程序不如覆盖方法可靠。例如,外部类可以清除事件处理程序,但它们不能更改覆盖中的代码。不过,您必须密封自己的类,否则您的方法可能会被覆盖。

另一个需要考虑的问题是:我想改变控件的工作方式吗?我是否必须控制代码的确切执行时刻(比如说在基类的代码之前、之后或代替)?如果是这样,您必须使用覆盖。