ホームページ >バックエンド開発 >C++ >C#のシャドーイングとオーバーライドの違いは何ですか?

C#のシャドーイングとオーバーライドの違いは何ですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-28 14:08:10535ブラウズ

What's the Difference Between Shadowing and Overriding in C#?

- c#

の隠された書き直しについての詳細な理解 オブジェクト指向のプログラミングでは、コードの動作に影響を与える重要な概念であるオブジェクト指向のプログラミング、隠し、書き換えです。この記事では、C#クラスの継承システムの2つの違いを調べます。

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>
特定の例では

ベース「a」の「bar」ステートメントは仮想であるため、「オーバーライド」キーワードでは、クラス「b」が書き換えて独自の動作を提供できます。

インパクト

派生インスタンスを基本クラスの参照に変換すると、隠すことは偶発的な動作につながる可能性があります。この場合、ベースクラスの隠された方法は、派生クラスの書き換え方法の代わりに呼び出される場合があります。これにより、ランタイム中にエラーが発生する可能性があります。

ただし、書き換えは継承階層構造に従い、これらのクラスで定義されている適切な方法が派生クラスの適切な方法で実装され、一貫した予想される行動を確保することを保証します。
<code class="language-c#">public override int Bar() {return 1;} //重写</code>

以上がC#のシャドーイングとオーバーライドの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。