このページをはてなブックマークに追加このページを含むはてなブックマーク このページをlivedoor クリップに追加このページを含むlivedoor クリップ

インターフェース

  • プロパティやメソッドを持たない特別なクラスのこと。ただし、中身が空というわけではなく、引数や戻り値のデータ型だけは定義されている。
  • インターフェースは任意のクラスにアクセスするための手段として利用される。つまり、インターフェースを通じてクラスにアクセスするわけである。

利点

  • クラスに直接アクセスせずに、インターフェースというクッションを通じて間接的にアクセスさせることで、クラスを保護することができる。
    • プロパティを使うことでクラス内部のメンバ変数を保護することができるが、これを一歩進めてクラス全体を保護するのがインターフェースである。
    • クラスにアクセスするときは、常にインターフェースを介させることでクラスを外部から保護することができる。これをカプセル化という。
  • さらに、インターフェースのことを知っていれば、クラスの中身のことを知らなくてもクラスを利用することができる。これはプログラム(クラス)の再利用という点で大きな意味を持つ。

インターフェースの実装

インターフェースの定義

Public Interface インターフェース名
 関連付けるプロパティやメソッドを記述する(型も含む)。
End Interface

クラスにおけるインターフェースの実装

 まず、クラスの宣言文の次の行で、インターフェースに関連付けるための定義を行う。

Implements インターフェース名

 次に、インターフェースを通じて公開するプロパティやメソッドにおいて、インターフェースに関連付けるための定義を行う。

プロパティにおけるインターフェースの実装

Property プロパティ名() As データ型 Implements インターフェース名.プロパティ名
 …
End Property

メソッドにおけるインターフェースの実装

SubあるいはFunction メソッド名() As データ型 Implements インターフェース名.メソッド名
 …
End Property

例1

1:新規フォームForm1を作成し、次のコントロールを配置する。

  • Button
    • (Name)プロパティ:Button1
  • TextBox
    • (Name)プロパティ:TextBox1
  • DateTimePicker
    • (Name)プロパティ:DateTimePicker1

2:同じプロジェクトのところに、Class1.vbを追加する。中身は次のようなコードにする。

Public Interface myInterface
 Property Name() As String
 Property Birthday() As String
 Function GetAge() As Integer
End Interface

Pulic Class Class1
 Implements myInterface

 Private strName As String
 Private datBirthday As Date

 Public Property Name() As String Implements myInterface.Name
  Get
   Return strName
  EndGet
  Set(ByVal value As String)
   strName = value
  End Set
 End Property

 Public Property Birthday() As String Implements myInterface.Birthday
  Get
   Return datBirthday
  EndGet
  Set(ByVal value As String)
   datBirthday = value
  End Set
 End Property

 Public Function GetAge() As Integer Implements myInterface.GetAge
  Return Int(DateTime.Today.Subtract(Birthday).Days / 365.25)
 End Property
End Public
  • 1〜5行目
    • Personという名前のインターフェースを宣言する。このとき、戻り値のデータ型も一緒に指定する。
  • 13〜33行目
    • Implementsキーワードを使って、Nameプロパティ、Birthdayプロパティ、GetAgeメソッドにインターフェースmyInterfaceを関連付けている。
      • この記述がないと、それぞれのプロパティやメソッドにアクセスできなってしまう。

3:Button1をクリックしたときのイベントハンドラを次のように記述する。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 Dim person As myInterface = New Class1()

 Dim iPlug As myInterface = person
 iPlug.Name = TextBox1.Text
 iPlug.Birthday = DateTimePicker1.Value.Date

 MessageBox.Show(iPlug.Nmae & "の年齢=" & iPlug.GetAge())
End Sub