クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
Visual Studio 2005
Visual Studio ドキュメント
Visual Basic
リファレンス (Visual Basic)
Visual Basic リファレンス
ステートメント
ステートメント F ~ P
 Interface ステートメント

  低帯域幅での表示をオンにする
このページは次のバージョンについて記述しています。
Microsoft Visual Studio 2005/.NET Framework 2.0

その他のバージョンについては、以下の情報を参照してください。
Visual Basic 言語リファレンス
Interface ステートメント (Visual Basic)

インターフェイスの名前を宣言し、インターフェイスに含まれるメンバの定義を開始します。

[ <attributelist> ] [ accessmodifier ] [ Shadows ] _
Interface name [ ( Of typelist ) ]
    [ Inherits interfacenames ]
    [ [ modifiers ] Property membername ]
    [ [ modifiers ] Function memberame ]
    [ [ modifiers ] Sub memberame ]
    [ [ modifiers ] Event memberame ]
    [ [ modifiers ] Interface memberame ]
    [ [ modifiers ] Class memberame ]
    [ [ modifiers ] Structure memberame ]
End Interface
attributelist

省略可能です。「属性リスト」を参照してください。

accessmodifier

省略可能です。次のいずれかを指定できます。

Visual Basic でのアクセス レベル を参照してください。

Shadows

省略可能です。「Shadows」を参照してください。

name

必ず指定します。このインターフェイスの名前です。宣言された要素の名前 を参照してください。

Of

省略可能です。ジェネリック インターフェイスであることを指定します。

typelist

Of キーワードを使用する場合は必ず指定します。このインターフェイスの型パラメータのリストを指定します。「型リスト」を参照してください。

Inherits

省略可能です。このインターフェイスが別のインターフェイスの属性およびメンバを継承することを指定します。Inherits ステートメント を参照してください。

interfacenames

Inherits ステートメントを使用する場合は必ず指定します。このインターフェイスの派生元のインターフェイスの名前を指定します。

modifiers

省略可能です。定義するインターフェイス メンバに適した修飾子を指定します。

Property

省略可能です。インターフェイスのメンバであるプロパティを定義します。

Function

省略可能です。インターフェイスのメンバである Function プロシージャを定義します。

Sub

省略可能です。インターフェイスのメンバである Sub プロシージャを定義します。

Event

省略可能です。インターフェイスのメンバであるイベントを定義します。

Interface

省略可能です。このインターフェイスの内部に入れ子になったインターフェイスを定義します。入れ子になったインターフェイスの定義は、End Interface ステートメントで終了する必要があります。

Class

省略可能です。インターフェイスのメンバであるクラスを定義します。このクラスの定義は、End Class ステートメントで終了する必要があります。

Structure

省略可能です。インターフェイスのメンバである構造体を定義します。このメンバの構造体の定義は、End Structure ステートメントで終了する必要があります。

membername

インターフェイスのメンバとして定義したプロパティ、プロシージャ、イベント、インターフェイス、クラスまたは構造体のそれぞれに必ず指定します。メンバの名前です。

End Interface

Interface の定義を終了します。

インターフェイスにはプロパティやプロシージャなど、クラスや構造体で実装可能なメンバをまとめて定義します。インターフェイスにはメンバのシグネチャだけを定義し、内部の処理は定義しません。

クラスや構造体でインターフェイスを実装する場合は、そのインターフェイスに定義されたすべてのメンバのコードを定義します。最後に、アプリケーションがそのクラスまたは構造体からインスタンスを作成した時点でオブジェクトが存在し、メモリ内で実行されます。詳細については、「Visual Basic におけるオブジェクト指向プログラミング」および「Visual Basic におけるインターフェイス」を参照してください。

インターフェイスとクラスの比較については、「インターフェイスの概要」を参照してください。

Interface は、名前空間またはモジュール レベルでのみ使用できます。つまり、インターフェイスの宣言コンテキストはソース ファイル、名前空間、クラス、構造体、モジュール、またはインターフェイスのいずれかである必要があり、プロシージャまたはブロックでは宣言できません。詳細については、「宣言コンテキストと既定のアクセス レベル」を参照してください。

インターフェイスには既定で Friend (Visual Basic) のアクセス レベルが設定されます。アクセス修飾子を使用してこれらのアクセス レベルを調整できます。詳細については、「Visual Basic でのアクセス レベル」を参照してください。

規則

  • インターフェイスの入れ子インターフェイスを別のインターフェイスの内部に定義できます。外側のインターフェイスを包含インターフェイスと呼び、内側のインターフェイスを入れ子になったインターフェイスと呼びます。

  • メンバの宣言プロパティまたはプロシージャをインターフェイスのメンバとして宣言する場合は、そのシグネチャだけを定義します。シグネチャには要素の種類 (プロパティまたはプロシージャ)、パラメータとその型、および戻り値の型が含まれます。このため、メンバの定義にはコードを 1 行だけ使用し、End FunctionEnd Property などの終了ステートメントをインターフェイスに定義することはできません。

    これに対し、列挙体や構造体、または入れ子になったクラスやインターフェイスを定義するときには、そのデータ メンバを含める必要があります。

  • メンバ修飾子モジュールのメンバを定義するときには、アクセス修飾子を使用できません。また、Overloads を除くどのプロシージャ修飾子 (Shared (Visual Basic)など) も指定できません。どのメンバでも、Shadows を使って宣言できます。また、プロパティを定義するときには、ReadOnly (Visual Basic)WriteOnly の他に Default (Visual Basic) を使用できます。

  • 継承インターフェイスに Inherits ステートメント を使用して、1 つ以上の基本インターフェイスを指定できます。2 つのインターフェイスに同じ名前のメンバが定義されている場合でも、その 2 つを継承できます。その場合は、実装先のコードで名前を修飾して、どちらのメンバを実装しているのか指定する必要があります。

    インターフェイスはより制限の高いアクセス レベルを持つ別のインターフェイスは継承できません。たとえば、Public インターフェイスは Friend インターフェイスを継承できません。

    インターフェイスは、自分の中に入れ子になっているインターフェイスを継承できません。

  • 実装クラスに Implements (Visual Basic) ステートメントを使ってインターフェイスを実装するときには、そのインターフェイスに定義されているすべてのメンバを実装する必要があります。さらに、実装先のコードでは、各シグネチャがインターフェイスに定義された対応するシグネチャと完全に一致していることが必要です。ただし、実装先のコードでのメンバの名前は、インターフェイスに定義されたメンバ名と同じでなくてもかまいません。

    クラスにプロシージャを実装するとき、そのプロシージャに Shared を指定できません。

  • 既定のプロパティ。インターフェイスには、1 つまでのプロパティを既定のプロパティとして指定できます。既定のプロパティは、プロパティ名を使用せずに参照できます。既定のプロパティを指定するには、Default (Visual Basic) 修飾子を使って宣言します。詳細については、「既定のプロパティ」を参照してください。

    つまり、インターフェイスに既定のプロパティを定義できるのは、インターフェイスが何も継承していない場合だけです。

動作

  • アクセス レベルすべてのインターフェイス メンバは、暗黙的に Public (Visual Basic) アクセスになります。メンバを定義するとき、アクセス修飾子は使用できません。ただし、インターフェイスを実装するクラスで、実装された各メンバに対してアクセス レベルを宣言できます。

    クラスのインスタンスを変数に割り当てる場合、そのメンバのアクセス レベルは、変数のデータ型が基のインターフェイスかそれとも実装先のクラスかによって変わります。次に例を示します。

    Visual Basic
    Public Interface IDemo
        Sub doSomething()
    End Interface
    Public Class implementIDemo
        Implements IDemo
        Private Sub doSomething() Implements IDemo.doSomething
        End Sub
    End Class
    Dim varAsInterface As IDemo = New implementIDemo()
    Dim varAsClass As implementIDemo = New implementIDemo()
    

    varAsInterface を指定してクラス メンバにアクセスする場合は、すべてのメンバがパブリック アクセスになります。ただし、varAsClass を指定してメンバにアクセスする場合、Sub プロシージャである doSomething はプライベート アクセスになります。

  • スコープインターフェイスのスコープは名前空間、クラス、構造体、またはモジュール全体です。

    インターフェイスのすべてのメンバのスコープは、インターフェイス全体になります。

  • 有効期間インターフェイスおよびそのメンバには、有効期間がありません。クラスがインターフェイスを実装し、そのクラスのインスタンスとしてオブジェクトが作成されると、そのオブジェクトが有効期間 (オブジェクトを実行しているアプリケーションが終了するまで) を持ちます。詳細については、「Class ステートメント (Visual Basic)」の「有効期間」を参照してください。

次の例は Interface ステートメントを使用して、thisInterface という名前のインターフェイスを定義します。これを実装するには、Property ステートメントと Function ステートメントを使用する必要があります。

Visual Basic
Public Interface thisInterface
    Property thisProp(ByVal thisStr As String) As Char
    Function thisFunc(ByVal thisInt As Integer) As Integer
End Interface

インターフェイス内で Property ステートメントと Function ステートメントで開始されたブロックが、End PropertyEnd Function で終了していない点に注意してください。インターフェイスには、そのメンバのシグネチャのみを定義します。Property ブロックと Function ブロックの完全な定義は、thisInterface を実装するクラスに記述されています。

コミュニティ コンテンツ   コミュニティ コンテンツとは
新しいコンテンツの追加 RSS  注釈
Processing
© 2009 Microsoft Corporation. All rights reserved. 使用条件  |  商標  |  プライバシー
Page view tracker