2つの方法「foo」と「bar」を含むベース「a」があるとします。 「foo」メソッドは一般に宣言されており、「bar」メソッド宣言は公開仮想であり、派生クラスが実装を書き直すことができます。ここで、「A」から継承された派生「B」を検討します。
隠し
非表示には、派生クラス「B」は「foo」と呼ばれるメソッドを定義し、その名前とパラメーターリストはベースメソッドと同じです。ただし、この場合、「B」でのメソッドの実装では、基本クラスの書き換えはありませんでした。クラス「B」に新しい独立したメソッドを作成して、ベースメソッドを非表示にします。「b」タイプのオブジェクトが「boo」タイプでアクセスされることを示します。
書き換え 一方、誘導クラスのメソッドで書き換えが発生する場合、この方法はベースクラスの仮想メソッドまたは抽象化方法と同じです。この場合、派生クラスの実装は、基本クラスの実装を明示的に置き換え、派生インスタンスのデフォルトの動作になりました。
<code class="language-c#">public new int Foo() { return 1;} //隐藏</code>特定の例では
:
インパクト
派生インスタンスを基本クラスの参照に変換すると、隠すことは偶発的な動作につながる可能性があります。この場合、ベースクラスの隠された方法は、派生クラスの書き換え方法の代わりに呼び出される場合があります。これにより、ランタイム中にエラーが発生する可能性があります。
ただし、書き換えは継承階層構造に従い、これらのクラスで定義されている適切な方法が派生クラスの適切な方法で実装され、一貫した予想される行動を確保することを保証します。<code class="language-c#">public override int Bar() {return 1;} //重写</code>
以上がC#のシャドーイングとオーバーライドの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。