我应该创建一个新方法来处理事件还是重写基方法?

本文关键字:处理事件 重写 方法 新方法 创建 一个 我应该 | 更新日期: 2023-09-27 18:17:35

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

UIElement类的事件和方法https://msdn.microsoft.com/en-us/library/system.windows.uielement (v = vs.110) . aspx #示例

和一段引用

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

我应该创建一个新方法来处理事件还是重写基方法?

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

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

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