2009-07-09 5 views
6

私は、メソッド/関数のオーバーライドが、派生クラスの実装をベースクラスの実装から再定義することを理解しています。ASP.NET用のC#でメソッドをオーバーライドするときに基本クラスの実装を呼び出す必要がありますか?

今何、私を混乱させる私はASP.NETなどCreateChildControls()内のクラスをオーバーライドする場合で、VS2008の自動生成(私は特別な理由のために、ランダムに選んだ):十分な

protected override void CreateChildControls() 
{ 
    base.CreateChildControls(); 
} 

良い、デフォルトの実装基本クラス 'CreateChildControls()'を呼び出します。だから、

私は私がどのようにbase.CreateChildControls()知らないために、いくつかのコードを実行したい場合は、私はこれを行う必要があります。

protected override void CreateChildControls() 
{ 
    /*My Code Here*/      
    base.CreateChildControls(); 
} 

や、base.CreateChildControls()は完全に、ちょうど

protected override void CreateChildControls() 
{ 
    /*My Code Here*/      
} 

答えて

11

を何無視しますあなた次第。一般的には、基本クラスのメソッドを呼びたいと思っています。特に、あなたが管理していないクラスでは、それを取得してもらえますか?Control。)しかし、あなたが非常に自信がある基本クラスの "stuff"が必要ない(または必要な)場合、呼び出しを削除することができます。

+0

私が本当に驚いているのは、あなたが非公開の基本クラスを上書きすることが許されるということです。 – Matt

+7

私はその自由を持たなければなりません。私があなたの子供だからといって、私があなたのようにすべてをやりたいのではありません。時々、私は世界に出て自分のやり方でやる必要があります。私があなたの実装を強制された場合、あなたは保護過剰な親になるでしょう。 :) –

+0

私のカスタム 'Control'でオーバーライドするときに基本クラスを呼び出すという事実から、' OnXxxx'オーバーライドに関して、私は一般に、派生メソッドの最後に 'base.OnXxxx'を呼び出しました。派生したメソッドの最初または最後に 'base.CreateChildControls'を呼び出すかどうかについての経験則はありますか? – superjos

3

これは、動作を完全に置き換えるか、動作を追加するかのどちらかの問題です。

CreateChildControlsのようなものでは、おそらく基本クラスの呼び出しを保持しています。

1

あなたのやりたいことによって異なります。 base.CreateChildControls()メソッドが呼び出され、メソッドが呼び出される前または後にカスタムアクションを実行する場合は、そのようにすることができます。

CreateChildControlsが呼び出されたときに何が起こっているのかを完全に制御したい場合は、単に呼び出すことを無視してください。

デフォルトでそこにあるという事実は、ちょっとした指導です。あなたがか完全基本実装を置き換える...ほとんどの場合、あなたは基本実装を呼び出す必要がありする場合は

0

それは依存し(そして、あなたは間違いなくCreateChildItems方法の場合にはそれを行う必要があります...)

0

template methodパターンをご覧ください。ライブラリクラスの実装方法については何もできませんが、作成するコードが正しく使用されるようにするのに役立ちます。

関連する問題