2

背後にある私のコードでは、次のようにイベントを配線します。

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

これは、例で見たものであるため、このようにしました。

  • base.OnInit()メソッドを呼び出す必要がありますか?
  • 暗黙的に呼び出されますか?
  • メソッドの最初または最後に呼び出す方がよいですか?
  • 基本メソッドに関する混乱が問題を引き起こす可能性がある例は何でしょうか?
4

6 に答える 6

3

私は明確にする必要があります:

ガイドラインでは、イベントの発生には仮想の「On EventName 」メソッドの呼び出しが含まれるべきであると推奨されていますが、派生クラスがそのメソッドをオーバーライドし、基本メソッドの呼び出しを忘れた場合でも、イベントは発生するはずです。

このページの約半分の「重要な注意」を参照してください。

保護された仮想メソッドをオーバーライドする派生クラスは、基本クラスの実装を呼び出す必要はありません。基本クラスは、その実装が呼び出されなくても、引き続き正しく機能する必要があります。

于 2008-08-21T03:46:51.800 に答える
0

この場合、ベースをOnInitと呼ばないと、Initは起動しません。

一般に、基本動作を発生させたくないことが特にわかっている場合を除き、常に基本メソッドを呼び出すことをお勧めします。

それが最初に呼び出されるか最後に呼び出されるかは、物事をどのように機能させたいかによって異なります。このような場合、イベントハンドラーをフックする代わりにオーバーライドを使用している場合は、メソッドの開始時にオーバーライドを呼び出す方が理にかなっています。そうすれば、コードはハンドラーの後に実行され、「通常の」イベントハンドラーをよりエミュレートします。

于 2008-08-21T03:38:41.770 に答える
0

公式のフレームワーク設計ガイドラインでは別の方法を推奨していますが、ほとんどのクラス設計者は、実際には次のように実際のイベントの発生をOnXxx()メソッドに任せます。

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

...したがって、クラスから継承し、base.OnClick(e)を呼び出さない場合、Clickイベントは発生しません。

そうです、公式の設計ガイドラインによれば、これは当てはまらないはずですが、念のためにbase.OnInit(e)と呼ぶ価値があると思います。

于 2008-08-21T03:41:20.097 に答える
0

公式のフレームワーク設計ガイドラインは、そうでないことを推奨しています

彼らはしますか?私は興味があります。私はいつも反対のことを考えてきました。フレームワークの設計ガイドラインを読んでFxCopを実行することは、私の見解を固めるだけです。イベントは常に、EventArgsパラメーターを受け取る仮想OnXxx()メソッドから発生する必要があるという印象を受けました。

于 2008-08-21T03:43:57.827 に答える
0

あなたはおそらくそれをそのようにする方が良いでしょう、そしてこの議論は消えます。ただし、この記事は興味深いものです。特に、.NETFrameworkがこのガイドラインを尊重していないことを考えると興味深いです。

于 2008-08-21T03:57:19.823 に答える
0

@Ch00kと@Scottわからない-私はOnEventNameパターンが好きです。そして、ええ、私はその方法からイベントを発砲した罪を犯した人の一人です。

On *メソッドをオーバーライドして、ベースメソッドを呼び出すのが良い方法だと思います。あなた自身のイベントを処理することはどういうわけか間違っているようです。

于 2008-08-21T04:09:00.530 に答える