2008-08-21 26 views
2

在我后面的代码我线了,像这样我的事件:调用基方法当重写页级事件

protected override void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 
    btnUpdateUser.Click += btnUpateUserClick; 
} 

我已经做到了这种方式,因为这是我的例子见过。

  • 是否需要调用base.OnInit()方法?
  • 它会被隐式调用吗?
  • 在方法开始时还是结束时称它为好?
  • 如果混淆基本方法会给你带来麻烦,那么这个例子会是什么?

回答

3

我要澄清:

的指南建议,触发一个事件应该涉及调用一个虚拟的“关于EventName“方法,但他们也说,如果派生类重写该方法并忘记调用基方法,则该事件仍应激发。

参见“重要提示”约一半,this page

重写受保护的虚方法派生类不需要调用基类的实现。即使未调用其实现,基类也必须继续正常工作。

0

在这种情况下,如果您不打电话给OnInit,那么Init甚至不会触发。

一般来说,最好的做法是始终调用基本方法,除非您明确知道您不希望发生基本行为。

是否在开始或结束时调用取决于您希望如何工作。在这种情况下,如果使用重写而不是挂接事件处理程序,则在方法开始时调用它会更有意义。这样,你的代码将在任何处理程序之后运行,这使得它更模仿一个“常规”事件处理程序。

0

虽然官方框架设计指南建议,否则,最一流的设计师实际上使OnXxx()方法负责射击的实际情况下,像这样:

protected virtual void OnClick(EventArgs e) 
{ 
    if (Click != null) Click(this, e); 
} 

...所以如果从继承类并且不调用base.OnClick(e),Click事件永远不会触发。

所以是的,即使这个不应该根据官方的设计指导方针,我认为这是值得打电话base.OnInit(e)只是为了确保。

0

官方框架设计指南建议,否则

他们这样做?我很好奇,我一直认为相反,阅读框架设计指南并运行FxCop只能巩固我的观点。我的印象是,事件应该始终从虚拟OnXxx被解雇()方法,即采取一个EventArgs参数

0

你可能最好这样做,然后这场辩论就会消失。这篇文章很有趣,特别是考虑到.NET Framework不遵守这个指南。

0

@ Ch00k和@Scott我不知道 - 我喜欢EventName模式我自己。是的,我是通过这种方法开展活动的人之一。

我认为重写On *方法并调用基本的方法是。处理你自己的事件似乎是错误的。

相关问题