C# の仮想/オーバーライドと新しいキーワード: メソッドのオーバーライドにどのキーワードを使用するか?
基本クラスでメソッドを定義する場合、プログラマは「virtual」キーワードを使用するか「new」キーワードを使用するかというジレンマに直面することがよくあります。この決定は、派生クラスのメソッド オーバーライドの動作に大きな影響を与える可能性があります。
仮想オーバーライド
基本クラスのメソッドで「virtual」キーワードを使用すると、派生クラスでオーバーライドできることを示します。このメソッドをオーバーライドするには、派生クラスで「override」キーワードを使用する必要があります。これにより、オーバーライドされたメソッドが期待どおりに動作し、継承階層とポリモーフィズムが維持されることが保証されます。
派生クラスがオーバーライドされたメソッドを呼び出すと、オブジェクトを保持する参照変数が基本クラス型であっても、オーバーライドされたバージョンが実行されます。これは遅延バインディングと呼ばれ、動的な動作が可能になります。
新しいキーワード
対照的に、派生クラス メソッドの "new" キーワードは、同じ名前の継承されたメソッドを非表示にする新しいメソッドを宣言します。新しいメソッドを使用すると、派生クラスの継承されたメソッドが置き換えられ、ポリモーフィズムが破壊されます。
派生クラスが「new」で宣言されたメソッドを呼び出すと、オブジェクトを保持する参照変数の型に関係なく、新しいメソッドが実行されます。これは早期バインディングと考えられ、多態性を妨げます。
例
次のコード例を考えてみましょう:
public class Base { public virtual bool DoSomething() { return false; } } public class Derived : Base { public new bool DoSomething() { return true; } }
Derived のインスタンスを Base 型の変数に割り当てて DoSomething() を呼び出した場合、virtual/override が使用されている場合は結果は false になりますが、new が使用されている場合は true になります。これは、遅延バインディングと早期バインディングの違いを強調しています。
以上がC# の仮想/オーバーライドと新規: メソッドのオーバーライドにどのキーワードをいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。