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

时间:2016-11-13 10:10:31

标签: c# events event-handling uwp uielement

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

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

和一段引用

  

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

1 个答案:

答案 0 :(得分:1)

在派生类中,我通常会覆盖现有方法。

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

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