インターフェース
クラスの特定機能を保証(強制)する仕組みをインターフェースと言います。
恐らく一番有名なインターフェースといえば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