ポリモーフィズムとカプセル化および継承は、オブジェクト指向プログラミングの 3 つの主要な特徴と考えられています。ポリモーフィズム (Polymorphism) は「複数の形式」を意味するギリシャ語で、C# には次の 2 種類のポリモーフィズムがあります。

 

  • コンパイル時ポリモーフィズム: コンパイル時ポリモーフィズムは、C# のメソッド オーバーロードと演算子オーバーロード (静的バインディングまたは早期バインディングとも呼ばれます) によって実現されます。
  • 実行時多態性: メソッドのオーバーロードによる実行時多態性。動的バインディングまたは遅延バインディングとも呼ばれます。

1. コンパイル時のポリモーフィズム

コンパイル中に関数をオブジェクトにリンクするメカニズムは早期バインディングと呼ばれ、静的バインディングとも呼ばれます。 C# では、コンパイル時のポリモーフィズムを実現するための 2 つのテクノロジ、つまり関数オーバーロードと演算子オーバーロードが提供されています。ここでは主に関数オーバーロードについて説明し、演算子オーバーロードについては後で説明します。

関数のオーバーロード

同じスコープ内に同じ名前の関数を複数定義できますが、これらの関数は、戻り値の型が異なることを除き、パラメーターの数やパラメーターの型が異なるなど、互いに異なっていなければなりません。

[例] さまざまな種類のデータを印刷するために print という名前の関数を定義します。

 using System;

namespace it-kiso.com
{
    class Demo
    {
        void print(int i){
            Console.WriteLine("int 型のデータを出力します:{0}", i);
        }
        void print(double d){
            Console.WriteLine("double 型のデータを出力します:{0}", d);
        }
        void print(string s){
            Console.WriteLine("string 型のデータを出力します:{0}", s);
        }
        static void Main(string[] args) 
        {
            Demo p = new Demo();
            p.print(123);
            p.print("IT基礎");
            p.print(3.1415926);
        }
    }
} 

操作の結果は次のようになります。

int 型のデータを出力します:123
string 型のデータを出力します:IT基礎
double 型のデータを出力します:3.1415926

2. 実行時のポリモーフィズム

C# では、abstract キーワードを使用して、インターフェイスの一部を実装するために使用される抽象クラスを作成できます。また、抽象クラスには、派生クラスで実装できる抽象メソッドが含まれています。

抽象クラスに関するいくつかのルールを次に示します。

  • 抽象クラスのインスタンスは作成できません。
  • 抽象メソッドは抽象クラスの外で宣言できません。
  • クラス定義でsealedキーワードを使用すると、sealedクラスとして宣言できますが、sealedクラスは継承できないため、抽象クラスでsealedクラスを宣言することはできません。

[例] 次のプログラムは抽象クラスを示します。

 using System;

namespace it-kiso.com
{
    abstract class Shape{
        public abstract int area();
    }
    class Rectangle : Shape{
        private int width, height;
        public Rectangle(int w, int h){
            width = w;
            height = h;
        }
        public override int area(){
            return (width * height);
        }
    }
    class Demo
    {
        static void Main(string[] args) 
        {
            Rectangle r = new Rectangle(12,15);
            double a = r.area();
            Console.WriteLine("長方形の面積は: {0}",a);
            Console.ReadKey();
        }
    }
} 

操作の結果は次のようになります。

長方形の面積は: 180

「 C# ポリモーフィズム」についてわかりやすく解説!絶対に観るべきベスト2動画

【C#】C#解説 part9 ポリモーフィズムについて 【Voiceroid】【プログラミング】
ポリモフィズムとは何か、使い方やメリットをコードで解説【Java入門講座】4-7 抽象クラスとポリモーフィズム

Share via
Copy link