ホームページ >バックエンド開発 >C#.Net チュートリアル >C# でのメソッドのオーバーライド
メソッドのオーバーライドは、C# プログラミングで一般的に使用される関数演算であり、派生クラスを利用して基本クラスで定義された演算をオーバーライドする必要があります。オーバーライドを成功させるには、メソッドは静的メソッドであることが期待され、メンバー分類とアクセス修飾子は基本メソッドと派生メソッドの両方で同じ型である必要があり、オーバーライドは派生クラスにのみ適用でき、基本クラスには適用できません。メソッドのオーバーライドに指定されている他の名前は、実行時ポリモーフィズム、動的ポリモーフィズム、遅延バインディングです。
アプリケーションに、派生クラスの基本クラス メソッドの動作を変更する要件があるとします。その場合は、メソッドのオーバーライドを行う必要があります。これを実現するには、別のタスクを実行するために、基本クラスで同じシグネチャを持つメソッドを派生クラスで作成する必要があります。 オーバーライド手法の使用方法を学ぶ前に、以下の点に留意する必要があります。
オーバーライド宣言によってオーバーライドされるメソッドをオーバーライド基本メソッドと呼びます。これは基本クラスに存在します。オーバーライドされる基本メソッドは、抽象メソッド、オーバーライド メソッド、または仮想メソッドのいずれかになります。新しい実装が呼び出され、オーバーライド メソッドがこの基本クラスから継承されます。
メソッドのオーバーライドには別のキーワードを使用します。彼らは、
コンパイラはプログラム内で virtual キーワードに遭遇すると、このメソッドがその派生クラスのいずれかによってオーバーライドされる可能性があることを理解します。構造は以下の通りです。
public virtual int EnemyHealth() { Console.WriteLine("Enemy Health"); }
これは派生クラスに存在します。これは、このメソッドが基本クラス内の同じ名前とシグネチャを持つメソッドをオーバーライドしていることをコンパイラーに伝えます。
public override int EnemyHealth () { Console.WriteLine("Enemy 1"); }
例
まず、Virtual および override キーワードを使用せずに例を見てみましょう。
コード:
class Birds { public void Color( ) { Console.WriteLine("Birds will have different Colors"); } } class Parrot:Birds { public void Color( ) { Console.WriteLine("Parrot is Green"); } } class ExecutionClass { public static void Main( ) { Birds object; object = new Birds( ); object .Color( ); object = new Parrot( ); object.Color( ); } }
出力:
上記の例では、派生クラス Parrot のオブジェクトを作成し、その参照を Birds 型の参照変数オブジェクトに保存しました。
次のステップでは、参照変数オブジェクトを使用して関数 Color () を呼び出します。 object には Parrot 型のオブジェクトへの参照が含まれているため、Parrot クラスの関数 Color () が実行されることが期待されるのは当然です。しかし、私たちは間違っています。プログラムの美しさによって、そんなことは起こりません。
驚いたことに、実行されるのは Birds クラスの Color() メソッドです。これは、関数が参照変数オブジェクトが参照するものではなく、参照のタイプに基づいて呼び出されるからです。オブジェクトは Birds 型の参照であるため、オブジェクトが誰を参照しているかに関係なく、クラス Birds の関数 Color () が呼び出されます。
次に、同じプログラムを virtual と override で書き直してみましょう。今回は理解を深められるよう、段階的に進めていきます。
任意の名前で基本クラスを作成します。ここではBirdsを使用しています。 virtual キーワードを使用してメソッドを作成します。これはオーバーライドされたメソッドとなり、継承されたクラスでオーバーライドされます。メソッド内に、コンソールに表示するメッセージを記述します。
class Birds { public virtual void Color( ) { Console.WriteLine("Birds will have different Colors"); } }
次に、もう 1 つのクラス Parrot を作成します。今回は、以前に作成した基本クラス、つまり Birds からそれを継承します。継承するには「:」記号を使用します。
クラス オウム: 鳥
ここでは、override キーワードを含む関数を記述し、メッセージを記述します。派生クラスのメソッド名とシグネチャが基本クラスのメソッド名とシグネチャと一致していることを確認してください。
public override void Color ( ) { Console.WriteLine("Parrot is Green"); }
オーバーライドをチェックする機能を実行するには、もう 1 つのクラスが必要です。任意の名前でクラスを作成します。その中に Main 関数を記述します。
class ExecutionClass { public static void Main( ) { } }
親クラスのオブジェクトを作成し、そのクラスのオブジェクトを使用して関数をトリガーします。これにより、Birds クラスに存在する Color メソッドが呼び出されます。
Birds object; object = new Birds( ); object .Color( );
次に、派生クラスのオブジェクトを作成し、Color メソッドを呼び出します。これにより、Parrot クラスの Color メソッドが呼び出されます。
object = new Parrot( ); object.Color( );
プログラムを実行したときの出力を推測できますか?これは以下のようになります。
出力:
キーワード オーバーライドと仮想により、メソッド名とシグネチャが同じであっても、いつでも基本クラスと派生クラスのメソッドを個別に呼び出すことができます。
この記事では、メソッドのオーバーライド、メソッドのオーバーライドの必要性、オーバーライドの原則の実世界の例、それを実現する方法、virtual キーワードと override キーワードを使用する必要性、およびコードを使用したオーバーライドの例について理解しました。 。オーバーライドは、派生クラスの基本クラス メソッドの動作を変更できるポリモーフィズムの便利な機能の 1 つであると結論付けることができます。
以上がC# でのメソッドのオーバーライドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。