Interface ステートメント (Visual Basic)

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

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

指定項目

語句

定義

attributelist

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

accessmodifier

省略可能です。次のいずれかになります。

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

Shadows

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

name

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

Of

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

typelist

Of 句 (Visual Basic) キーワードを使用する場合は必ず指定します。このインターフェイスの型パラメーターのリストを指定します。必要に応じて、ジェネリックの In 修飾子や Out 修飾子を使用して、それぞれの型パラメーターをバリアントとして宣言できます。「型リスト」を参照してください。

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

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

規則

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

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

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

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

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

    インターフェイスには、それ自身より厳しいアクセス レベルを持つ別のインターフェイスを継承することはできません。たとえば、Public インターフェイスは Friend インターフェイスを継承できません。

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

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

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

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

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

[動作]

  • **アクセス レベル。**すべてのインターフェイス メンバーは、暗黙的に Public (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 ステートメントを使用する必要があります。

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

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

参照

関連項目

Class ステートメント (Visual Basic)

Module ステートメント

Structure ステートメント

Property ステートメント

Function ステートメント (Visual Basic)

Sub ステートメント (Visual Basic)

In (ジェネリック修飾子) (Visual Basic)

Out (ジェネリック修飾子) (Visual Basic)

概念

Visual Basic におけるジェネリック型 (Visual Basic)

ジェネリック インターフェイスの分散 (C# および Visual Basic)

その他の技術情報

インターフェイス (Visual Basic)