覆盖虚方法还是创建事件处理程序?

Rya*_*hel 11 c# events virtual coding-style

只是乱七八糟地看着Game类的XNA文档,并注意到有一个Deactivated事件和OnDeactived一个可以覆盖的虚拟方法.

为事件创建事件处理程序Deactivated和覆盖OnDeactived虚拟方法都允许客户端处理失去焦点的游戏.

我想知道应该采用哪种方法来处理失去焦点的游戏.创建事件处理程序或覆盖虚拟方法?每种方法之间是否有任何差异?

Jon*_*eet 10

有两个明显的区别:

  • 您只能覆盖OnDeactivated从声明它的类中派生的类 - 仅仅"其他"代码只能使用该事件
  • 在内部OnDeactived,由您来决定是否要打电话base.OnDeactivated- 您可以有效地抑制事件或更改参数; 在您自己的代码之前或之后调用它等.

如果你已经从课程中得到了,那么无论哪种方式都可行 - 我个人可能会经常使用这个事件,除非我想采取任何其他只能通过覆盖执行的动作.除了其他任何东西之外,如果您想将代码移动到其他任何位置,这会使代码更具可移植性.然而,无论如何,我通常不是继承的粉丝,所以我有偏见:)