2016-11-13 31 views
5

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

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

的方法和引用

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

回答

1

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

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

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

+0

为什么重写提供对确切执行时刻的控制,而事件可能暗示的不是? –

+1

因为事件是先处理谁先处理的,再加上你在事件处理器踢之前不能处理任何事情。也许'UIElement'已经运行了一些你不想要的代码。当您覆盖该方法时,可以防止这种情况发生。 –

相关问题