我在使用C#编写UWP程序时使用了从UIElement
类派生的类,其中我想要包括处理输入控件,如鼠标和键盘操作。现在我看到已有虚拟方法显示OnSomeEvent()
,显然我可以覆盖这些方法以适应我的处理流程,或者我可以创建新方法处理在基类中定义的公共事件,并在构造函数中将它们订阅到这些输入事件。我认为这两种方法都有效但我希望知道哪种方法更专业或更明智,以及为什么。此外,它有助于解释为什么MS同时提供这两种方式。
这里是UIElement
课程的事件和方法
https://msdn.microsoft.com/en-us/library/system.windows.uielement(v=vs.110).aspx#Examples
和一段引用
UIElement为元素布局提供了一个起点 特性,并且还公开派生类的虚方法 可以覆盖,这可以影响布局的渲染行为 元素及其子元素。大部分输入和聚焦 一般来说,元素的行为也在UIElement中定义 类。这包括键盘,鼠标和手写笔输入的事件, 和相关的状态属性。其中许多事件都是路由事件, 许多与输入相关的事件都有冒泡路由 版本以及事件的隧道版本。这些配对 事件通常是最值得控制的事件 作者。
答案 0 :(得分:1)
在派生类中,我通常会覆盖现有方法。
为什么呢?事件处理程序不如override方法可靠。例如,外部类可以清除事件处理程序,但是它们无法更改覆盖中的代码。你必须密封你自己的课程,否则你的方法可能会被覆盖。
要考虑的另一点是:我想改变控件的工作方式吗?我是否必须控制代码的确切执行时刻(让我们在基类代码之前,之后或代替)?如果是这样,你必须使用覆盖。