c#の仮想/オーバーライドと新しいキーワード:どのキーワードを使用してメソッドを書き換えるのはいつですか?
基本クラスでメソッドを定義する場合、プログラマーはしばしば「仮想」キーワードを使用するか「新しい」キーワードを使用するかという問題に直面します。この決定は、派生クラスでのメソッド書き換えの動作に大きく影響します。
仮想オーバーライド
基本クラスのメソッドの「仮想」キーワードを使用して、派生クラスでオーバーライドできることを示します。メソッドをオーバーライドするには、派生クラスは「オーバーライド」キーワードを使用する必要があります。これにより、オーバーライドされた方法が予想どおりに機能し、継承階層と多型を維持します。
派生クラスが書き換えられたメソッドを呼び出すと、オブジェクトを保持している参照変数がベースクラスタイプであっても、オーバーライドバージョンを実行します。これは後期結合と呼ばれ、動的な動作を可能にします。
新しいキーワード
代わりに、派生クラスメソッドの「新しい」キーワードは、同じ名前で継承されたメソッドを隠す新しい方法を宣言します。使用すると、新しい方法は派生クラスの継承された方法を置き換え、したがって多型を破壊します。
派生クラスが「new」で宣言されたメソッドを呼び出すと、オブジェクトを保持する参照変数のタイプに関係なく、新しいメソッドを実行します。これは初期の結合と見なされ、多型を妨げます。
例
次のコードの例を検討してください:
public class Base
{
public virtual bool DoSomething() { return false; }
}
public class Derived : Base
{
public new bool DoSomething() { return true; }
}
型型ベースの変数に派生したインスタンスを割り当て、dosomething()を呼び出す場合、仮想/オーバーライドを使用すると結果はfalseになりますが、新しいを使用すると結果は真実です。これは、後期結合と早期結合の違いを強調しています。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3