VB.NETをつつく27ーインターフェイス。約束は守ろう。
じゃあ、早速インターフェイスの定義方法をつつくピヨッ!
'実用的でない例
Public Interface FooInterface
'実装するべきプロパティ
Property FooProperty() As Object
'実装するべきメソッド
Sub FooMethod(ByVal obj As Object)
Sub FooMethod1(ByVal obj As Object)
Function FooFunction() As Object
'実装するべきイベント
Event FooEvent As EventHandler
End Interface
どう?難しくないよね♪インターフェイスの定義はInterfaceキーワードを使用するところと、Publicとかのアクセス修飾子を指定しない点と、実装を書かない点がが特徴ピヨ。何故アクセス修飾子を指定しないのかというと、.NETではインターフェイスは基本的に外部に対する約束事だからなんだよ。
この定義したインターフェイスを実装するクラスは次のようにするピヨ。
Public Class FooClass
Implements IFoo 'つんつん
Public Event FooEvent(ByVal sender As Object, _
ByVal e As System.EventArgs) Implements IFoo.FooEvent
Public Function FooFunction() As Object Implements IFoo.FooFunction
End Function
'つんつん
Public Sub FooMethod(ByVal obj As Object) _
Implements IFoo.FooMethod, IFoo.FooMethod1
End Sub
Public Property FooProperty() As Object Implements IFoo.FooProperty
Get
End Get
Set(ByVal value As Object)
End Set
End Property
End Class
VB.NETではImplementsで指定して実装するんだ。クラス宣言の直後にImplementsで実装するインターフェイスを指定してから、 各要素で Implementsステートメントで、どのインタフェース要素を実装するのかを宣言しているんだ。 このImplementsステートメントは何と複数に対応する事が可能なんだ。
'つんつん
'複数のメソッドを一度に定義している!
Public Sub FooMethod(ByVal obj As Object) _
Implements IFoo.FooMethod, IFoo.FooMethod1
End Sub
こんな具合にね♪これは使う機会が少ないかもしれないけど覚えておくと便利ピヨ。
それで、インターフェイスとクラスの使い分けなんだけど、クラスは縦に継承されていくけど、インターフェースは横に継承される点が違うピヨ。 クラスの場合、親から子へと意味ある継承をするけど、全ての状況に対応できるわけじゃないんだ。 何故かというと、直接的には関係ないけど同じ要素を持つことがあるからなんだ。 クラスの継承は親子の遺伝。 インターフェイスの継承は師弟関係と覚えたらいいよ。
今回はこれで終わり。