ポリモーフィックな動作の原理を調べる
ポリモーフィズムを使用すると、異なる型のオブジェクトを共通の基本型のオブジェクトとして扱うことができます。 この動作により、コンパイル時に特定の型を知らなくても、複数の型のオブジェクトで動作するコードを記述できます。
たとえば、派生クラスの Shape と Circleを持つ基底クラス Rectangle について考えてみます。 Shape オブジェクトの一覧を作成し、それに Circle と Rectangle のインスタンスを追加することができます。 リストを反復処理するときに、オブジェクトの特定の型を知らなくても、各オブジェクトに対して Draw メソッドを呼び出すことができます。 このプロセスは、動作中のポリモーフィックな動作の例です。
Cにおけるポリモーフィズムへのアプローチ#
C# 開発者は、次のいずれかの方法を使用してポリモーフィズムを実装できます。
継承ベースのポリモーフィズム: C# でのクラスの継承により、派生クラスは基底クラスからメンバーを継承できます。 基底クラスのメンバーは、派生クラスでオーバーライドして、特定の実装を提供できます。 派生クラス型を参照する基底クラスのインスタンスを作成すると、基底クラス オブジェクトから派生クラスのメンバーにアクセスできます。 継承ベースのポリモーフィズムは、C# でポリモーフィズムを実装する一般的な方法です。
インターフェイス ベースのポリモーフィズム: C# のインターフェイスは、クラスが実装できるコントラクトを定義します。 クラスがインターフェイスを実装すると、クラスは実装に必要なプロパティとメソッドのセットを受け取ります。 この要件により、インターフェイス参照がさまざまなクラスのオブジェクトにプロパティとメソッドのセットを実装するように指示できるポリモーフィックな動作が可能になります。 インターフェイス ベースのポリモーフィズムは、C# でポリモーフィズムを実装するもう 1 つの一般的な方法です。
メソッドのオーバーロードとメソッドのオーバーライド
メソッドのオーバーロードとメソッドのオーバーライドは、異なる動作を生成するメソッド呼び出しを実装するための 2 つの一般的な手法です。 2 つの手法の比較を次に示します。
メソッドのオーバーロード: メソッドのオーバーロードを使用すると、同じ名前で、同じクラス内の異なるパラメーターを持つ複数のメソッドを定義できます。 呼び出されるメソッドは、メソッド シグネチャに基づいてコンパイル時に決定されます。 メソッドのオーバーロードは、多くの場合、コンパイル時ポリモーフィズムと呼ばれます。
メソッドのオーバーライド: メソッドのオーバーライドにより、派生クラスは基底クラスで既に定義されているメソッドの特定の実装を提供できます。 呼び出されるメソッドは、オブジェクトの実際の型に基づいて実行時に決定されます。 メソッドのオーバーライドは、ランタイムポリモーフィズムの例です。
このトレーニングでは、C# のポリモーフィズムの重要な側面であるメソッドのオーバーライドに重点を置いています。
Cにおける多型の原理#
ポリモーフィズムは、次の原則に基づいています。
- メソッドのオーバーライド: メソッドのオーバーライドにより、派生クラスは基底クラスで既に定義されているメソッドの特定の実装を提供できます。 この機能は継承によって可能になり、ランタイムポリモーフィズムの重要な側面です。
- 仮想メソッドと抽象メソッド: 仮想キーワードは、派生クラスでオーバーライドできる基底クラスのメソッドを宣言するために使用されます。 抽象キーワードは、派生クラスでオーバーライドする必要があるメソッドを宣言するために使用されます。
- 基底クラス参照: ポリモーフィズムを使用すると、基底クラス参照が派生クラスのオブジェクトを指すことができます。 この継承メカニズムにより、基底クラス参照を介して派生クラスでオーバーライドされたメソッドの呼び出しが可能になります。
- インターフェイス ベースのポリモーフィズム: インターフェイスは、クラスが実装できるコントラクトを定義します。 このコントラクトを使用すると、共通のインターフェイスを介して異なるクラスを均一に処理できるため、疎結合と柔軟性が促進されます。
ポリモーフィズムの利点
コードの再利用性: ポリモーフィズムは、同じコードがさまざまな種類のオブジェクトを操作できるようにすることで、コードの再利用性を高めます。
柔軟性と保守容易性: ポリモーフィズムは、オブジェクトを定義するコードからオブジェクトを使用するコードを切り離すことで、柔軟性と保守性を向上させます。
拡張性: ポリモーフィズムを使用すると、同じインターフェイスを実装する新しいクラスを追加したり、同じ基底クラスから継承したりする新しいクラスを追加することで、システムを簡単に拡張できます。
概要
ポリモーフィズムは、コードの柔軟性、再利用性、保守容易性を実現するオブジェクト指向プログラミングの重要な概念です。 C# でのポリモーフィズムとその実装の原則を理解することで、時間の経過と共に保守と進化を容易にするモジュール式の拡張可能なアプリケーションを作成できます。