佐々木屋

技術的なことから趣味まで色々書きます

ポリモーフィズム(インターフェース)

インターフェースでポリモーフィズムを実現します。
インターフェースはクラスの規程のみを定めたものとなる為、抽象クラスと同様にポリモーフィズムを比較的容易に実現することが可能です。

継承の時と同じように、何かメッセージを表示する共通メソッドをインターフェースに定義しておき、それぞれのクラスに派生させる場合を考えてみます。

interface IClass {
    void ShowMessage();
}

public class Class1 : IClass{
    public void ShowMessage() {
        Console.WriteLine("クラス1");
    }
}
public class Class2 : IClass {
    public void ShowMessage() {
        Console.WriteLine("クラス2");
    }
}
public class Class3 : IClass {
    public void ShowMessage() {
        Console.WriteLine("クラス3");
    }
}
Interface IClass
    Sub ShowMessage()
End Interface

Public Class Class1 : Implements IClass
    Public Sub ShowMessage1() Implements IClass.ShowMessage
        Console.WriteLine("クラス1")
    End Sub
End Class
Public Class Class2 : Implements IClass
    Public Sub ShowMessage2() Implements IClass.ShowMessage
        Console.WriteLine("クラス2")
    End Sub
End Class
Public Class Class3 : Implements IClass
    Public Sub ShowMessage3() Implements IClass.ShowMessage
        Console.WriteLine("クラス3")
    End Sub
End Class

これらもポリモーフィズムの実現により同じメソッド名で違った処理を呼ぶことが可能となります。

List<IClass> icls = new List<IClass>() { new Class1(), new Class2(), new Class3() };
foreach (IClass c in icls) {
    c.ShowMessage();
}
Dim icls As New List(Of IClass) From {New Class1(), New Class2(), New Class3()}
For Each c As IClass In icls
    c.ShowMessage()
Next