佐々木屋

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

インターフェース

クラスの特定機能を保証(強制)する仕組みをインターフェースと言います。

恐らく一番有名なインターフェースといえばIDisposableインターフェースですね。IDisposableはDisposeの実装が約束されますので、クラスを呼ぶ場合にusingステートメントが利用できるようになる(リソース解放が確約されているので)わけです。

インターフェースの制約

通常クラスのメソッドであれば規則と内容両方を実装しますが、インターフェースは規則のみを実装します。つまり、約束事だけを表現するようなクラスとなります。その点では抽象クラスに非常ににています。

インターフェースで定義するメソッドやプロパティはアクセス修飾子はつけることが出来ません。というより、定義したメンバーは全て自動的にpublic abstract(VB.NETの場合はPublic MustOverride)となります。

他に、メンバー変数や静的メソッドは定義出来ないなどの制約があります。

また、インターフェースを定義した派生クラスでは、必ずインターフェースメソッドを利用する必要があります。

インターフェースの実装

C#の場合は継承と同様でクラス名の後に「:」を付けてそのままインターフェースを定義します。

interface IClass {
    void ShowMessage();
}
public class Class1 : IClass {
    public void ShowMessage() {
        Console.WriteLine("派生クラス");
    }
}

VB.NETの場合C#と少し実装方法が異なります。Implementsキーワードで実装するクラス名の後に定義しますが、メソッドも同じようにImplementsキーワードとインターフェースで定義したメソッド名を定義する必要があります。

Interface IClass
    Sub ShowMessage()
End Interface
Public Class Class1 : Implements IClass
    Public Sub ShowMessage() Implements IClass.ShowMessage
        Console.WriteLine("派生クラス")
    End Sub
End Class

VB.NETのみ、派生クラスのメソッド名は別名を使用することができます。

Public Class Class1 : Implements IClass
    Public Sub HogeMessage() Implements IClass.ShowMessage
        Console.WriteLine("派生クラス")
    End Sub
End Class