「仮想オーバーライド」と「新しい」キーワードの違いは、詳細な理解方法宣言
オブジェクト指向プログラミングでは、メソッド書き換えにより、サブクラスは親クラスで定義されたメソッドの独自の実装を提供できます。これにより、コードはカスタマイズと多型を実現できます。ただし、「仮想」と「オーバーライド」キーワードの組み合わせ宣言ベースタイプの方法、およびサブタイプの「新しい」キーワードを使用する方法は、2つの間にわずかな違いを持っています。
ベースタイプで宣言された方法が「仮想」である場合、サブクラスがこの方法を書き換えることができることを示します。したがって、サブクラスが「オーバーライド」キーワード書き換え方法を使用すると、実際にはベースクラスの実装を置き換えます。
「仮想オーバーライド」と「新しい」の主な違いは、ランタイム中の動作に対する影響です。次の例を考えてみましょう:
で「オーバーライド」の代わりに「新しい」を使用すると、基礎方式を隠すための別の方法が発生します。この場合:相続性と多型
「仮想オーバーライド」を使用する場合、サブクラスメソッドは親クラスの実装にアクセスして変更できます。これにより、柔軟な継承と多型が可能になります。代わりに、「New」は継承チェーンを破壊した基本メソッドを完全に置き換えました。
仮想スケジューリングテーブル(vdt)
<code class="language-csharp">public class BaseClass { public virtual bool DoSomething() { return false; } } public class DerivedClass : BaseClass { public override bool DoSomething() { return true; } } // ... BaseClass obj = new DerivedClass(); obj.DoSomething(); // 返回 true (重写后的实现)</code>
C#では、仮想メソッドは仮想スケジューリングテーブル(VDT)に保存されます。仮想メソッドを呼び出すときは、実際のオブジェクトのタイプに従って適切な実装を決定します。これにより、多型が可能になります。ただし、「新しい」メソッドはVDTには含まれておらず、動的なメソッドの選択が防止されます。 DerivedClass
<code class="language-csharp">//... DerivedClass obj = new DerivedClass(); obj.DoSomething(); // 返回 false (基类实现)</code>
「仮想オーバーライド」により、書き換えベースの方法が継承と多型を達成することができ、「new」はサブクラスに独立した方法を作成します。これら2つのキーワードの違いを理解することは、効果的な書き換え方法と柔軟なデザインに不可欠です。
以上がC# メソッド オーバーライドにおける 'virtual override' キーワードと 'new' キーワードの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。