C#のポリモーフィズムのサンプルです。
目次
サンプル | ポリモーフィズム |
ポリモーフィズムのサンプル | |
Listを使用して書き換える |
ポリモーフィズム
- 複数のクラスで同じインターフェースを実装(抽象クラスを継承)します。
- 呼び出す側のメソッドの引数のデータ型にインターフェース(抽象クラス)を指定した場合、
メソッドの引数は、異なるクラスのインスタンスを指定できるようになります。
→引き渡すインスタンスによって処理の内容が変えることができます。
→ポリモーフィズム、多態性とも呼ばれます。 - ポリモーフィズムは、オブジェクト指向の3大要素の一つです。(他はカプセル化と継承)
ポリモーフィズムのサンプル
using System;
namespace Project1
{
public interface Parts
{
void print(); // 抽象メソッド
}
public class Machine1 : Parts
{
void Parts.print()
{
Console.WriteLine("RED");
}
}
public class Machine2 : Parts
{
void Parts.print()
{
Console.WriteLine("BLUE");
}
}
class TestA
{
static void Main()
{
Machine1 m1 = new Machine1();
Machine2 m2 = new Machine2();
exe01(m1); // RED
exe01(m2); // BLUE
}
// 同じインターフェース型でアクセスできる
public static void exe01(Parts pt)
{
pt.print();
}
}
}
9,16行目の2つのクラスは5行目のインターフェースを実装しています。
30,31行目は同じexe01メソッドを実行していますが出力される内容は異なります。
34行目の引数の型はインターフェース型になっています。
Listを使用して書き換える
上記のコードは、Listを使用して書き換えることができます。
using System;
using System.Collections.Generic;
namespace Project1
{
public interface Parts
{
void print(); // 抽象メソッド
}
public class Machine1 : Parts
{
void Parts.print()
{
Console.WriteLine("RED");
}
}
public class Machine2 : Parts
{
void Parts.print()
{
Console.WriteLine("BLUE");
}
}
class TestA
{
static void Main()
{
List pts = new List();
pts.Add(new Machine1());
pts.Add(new Machine2());
foreach (Parts pt in pts)
{
exe01(pt); //RED BLUE
}
}
// 同じインターフェース型でアクセスできる
public static void exe01(Parts pt)
{
pt.print();
}
}
}
30,31行目は、インスタンスをリストに追加しています。
33~36行目は、foreach文でループを回してメソッドを実行しています。同じインターフェースの型なので実行できます。
関連の記事
C# クラスの継承の仕組みとサンプル
C# インターフェースのサンプル(interface)
C# 抽象クラスと抽象メソッドのサンプル(abstract)
C# Listの使い方のサンプル