2008-08-21 30 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 *方法並調用基本的方法是。處理你自己的事件似乎是錯誤的。

相關問題