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

*インターフェース [#o6288777]

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


*利点 [#ze73112b]

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


*インターフェースの実装 [#b454ecde]


**インターフェースの定義 [#ifb8ca58]

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


**クラスにおけるインターフェースの実装 [#l89e2f55]

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


***プロパティにおけるインターフェースの実装 [#fbaf61d9]

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

 End Property


***メソッドにおけるインターフェースの実装 [#kde81fc0]

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

 End Property

**例1 [#v1adb590]

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