2013-05-02 5 views
7

私のサブクラスで、継承された保護された非仮想メソッドをthis.Method()またはbase.Method()と呼ぶべきですか?これです。対ベース。保護された非仮想メソッドを継承していますか?

thisを使用すると、同じ名前の新しいメソッドでメソッドを簡単に非表示にすることができます。メソッドの呼び出しで、基本クラスの実装のみを特に呼び出す必要があることが確実な場合にのみ、baseを明示的に指定する必要がありますか?

+1

呼び出すときはthis.Method()を呼び出し、派生クラス内の実装されたオーバーライドされたメソッドの中からbase :: Method()を呼び出してください。あなたが何かをオーバーライドしたときに、将来、base.Method();を実行する必要はありません。 –

+0

これは仮想メソッドではなく、上書きすることはできません。非仮想メソッドは隠すことしかできません。 – Monstieur

+2

「Method()」と呼ぶのはなぜですか? 'this'がそれ自身の' Method() 'でそれを隠すと、それが呼び出されます。そうでなければ、 'base.Method()'が呼ばれます。これはデフォルトの動作として選択されました。おそらく良い理由のために。^_^ – Corak

答えて

2

常にthis.Method()を使用して呼び出します。

メソッドを非表示にすると、基本クラスのメソッドではなく、新しいメソッドを呼び出すことができます。一方、基本クラスのメソッドを仮想にすると、多態的な場合にコードを呼び出したいと思うでしょう。

将来を予測することは困難ですが、これらのシナリオはもっと起こりそうです。

7

Methodという名前のメンバーをサブクラスに追加して、引き続き継承されたメソッドを呼び出す場合は、base.Method()を使用する必要があります。 より多くの派生クラスにMethodというメンバーを追加しても、this.Method()の呼び出しの意味は変更されません。

関連する問題