無差別に技術をついばむ鳥

情報処理技術全般を気まぐれにつつくゆるいブログです

VB.NETをつつく27ーインターフェイス。約束は守ろう。

今回はインターフェイスをつつくピヨ。インターフェイスとは、オブジェクトが持つべき要素を定義したものなんだ。一説によるとこの概念はCOM(Componet Object Model)から受け継いだものらしい。でも、Javaとか既存言語からある概念だから、.NETのインターフェイスはCOMと既存のインターフェイスの融合だと思うピヨ。
じゃあ、早速インターフェイスの定義方をつつくピヨッ!


'実用的でない例
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


こんな具合にね♪これは使う機会が少ないかもしれないけど覚えておくと便利ピヨ。
それで、インターフェイスとクラスの使い分けなんだけど、クラスは縦に継承されていくけど、インターフェースは横に継承される点が違うピヨ。 クラスの場合、親から子へと意味ある継承をするけど、全ての状況に対応できるわけじゃないんだ。 何故かというと、直接的には関係ないけど同じ要素を持つことがあるからなんだ。 クラスの継承は親子の遺伝。 インターフェイスの継承は師弟関係と覚えたらいいよ。
今回はこれで終わり。
別窓 | VB.NET | コメント:0 | トラックバック:0 | ∧top | under∨
<<C#をつつく27ーインターフェイス。約束は守ろう。 | 無差別に技術をついばむ鳥 | 中の人の徒然草58>>

この記事のコメント

∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

この記事のトラックバック

∧top | under∨
| 無差別に技術をついばむ鳥 |