C# でのメソッドのオーバーライドとメソッドの非表示
はじめに
C# の継承では、開発者はメソッドのオーバーライドとメソッドの隠蔽の概念によく遭遇します。どちらの手法も継承されたメソッドの動作を変更しますが、その方法は大きく異なります。効果的なクラス階層を設計するには、それらの違いと正しい使用法を理解することが重要です。
メソッドのオーバーライド
メソッドのオーバーライドとは、基本クラスの仮想メソッドと同じシグネチャを持つ新しいメソッドを派生クラスに作成することです。これにより、派生クラスは、基本クラスの規則を維持しながら独自の実装を提供できるようになります。メソッドのオーバーライドは、基本クラスの機能を拡張または特殊化するためによく使用されます。
たとえば、次のコードを考えてみましょう:
<code class="language-csharp">public class BaseClass { public virtual void WriteStr() { Console.WriteLine("Base class string"); } } public class DerivedClass : BaseClass { public override void WriteStr() { Console.WriteLine("Derived class string"); } }</code>
WriteStr() が DerivedClass インスタンスで呼び出されると、派生クラスの実装が実行されます。これはオーバーライドの力を示しています。基本クラスのインターフェイスを変更せずに、より具体的な動作を派生クラスに実装できるようになります。
メソッドを非表示
一方、メソッドの非表示では、基本クラスの非仮想メソッドと同じ名前の新しいメソッドが導入されます。オーバーライドとは異なり、派生クラスのメソッドは基本クラスの実装を完全に置き換えます。この手法は、基本クラスのメソッドに依存するコードで予期しない動作が発生する可能性があるため、通常は推奨されません。前の例で、BaseClass の WriteStr() メソッドを非仮想メソッドに変更し、DerivedClass に WriteStr() メソッドを追加した場合、次のコードは派生クラスのメソッドを実行しません。
これは、BaseClass の WriteStr() の非仮想的な性質により、コンパイラが派生クラスのメソッドを隠すためです。
<code class="language-csharp">BaseClass baseObj = new DerivedClass(); baseObj.WriteStr(); // 执行基类的 WriteStr()</code>
メソッドのオーバーライドは次の状況に適用されます:
基本クラス メソッドのより特殊な実装を提供したいと考えています。
メソッドのオーバーライドとメソッドの非表示は、正しく使用すると、C# 継承の強力なツールになります。それらの違いを理解し、賢明に適用すると、堅牢で維持しやすいクラス階層を作成できます。上記のガイドラインに従うことで、開発者はこれらのテクノロジを効果的に活用して、目的の機能を実現できます。
以上がC# におけるオーバーライドとメソッドの隠蔽: 違いは何ですか? それぞれをいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。