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

C# 我应该创建一个新方法来处理事件还是重写基本方法?,c#,events,event-handling,uwp,uielement,C#,Events,Event Handling,Uwp,Uielement,在使用C#编写UWP程序时,我使用了一个从UIElement类派生的类,其中我希望包括处理输入控件,如鼠标和键盘操作。现在我看到已经有一些虚拟方法说OnSomeEvent(),显然我可以重写这些方法来适应我的处理过程,或者我可以创建新方法来处理基类中定义的公共事件,并在构造函数中订阅这些输入事件。我假设这两种方法都有效,但我希望知道哪种方法更专业或更可取,以及为什么。另外,这也有助于解释为什么微软同时提供这两种方式。 以下是UIElement类的事件和方法 和一段引述 UIElement为元素

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

以下是
UIElement
类的事件和方法

和一段引述

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


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

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


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

为什么override提供了对确切执行时刻的控制,而您可能暗示的事件不是这样?因为事件是由谁先订阅的人来处理的,而且在事件处理程序启动之前,您无法处理任何事情。可能
ui元素
已经运行了一些您不想运行的代码。您可以在重写该方法时防止发生这种情况。