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 任意。 次のいずれかの値を指定します。

- Public
- Protected
- Friend
- Private
- Protected Friend
- Private Protected

Access levels in Visual Basic」を参照してください。
Shadows 任意。 「Shadows」を参照してください。
name 必須です。 このインターフェイスの名前。 「 Declared Element Names」を参照してください。
Of 任意。 これがジェネリック インターフェイスであることを指定します。
typelist Of キーワードを使用する場合は必須です。 このインターフェイスの型パラメーターの一覧。 必要に応じて、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 の定義を終了します。

Remarks

インターフェイスでは、クラスおよび構造体で実装できる、プロパティやプロシージャなどの一連のメンバーを定義します。 インターフェイスでは、メンバーのシグネチャのみを定義し、それらの内部動作は定義しません。

クラスまたは構造体では、インターフェイスで定義されているすべてのメンバーにコードを提供することによって、インターフェイスを実装します。 最後に、アプリケーションによって、そのクラスまたは構造体からインスタンスが作成されると、メモリ内にオブジェクトが存在し、実行されます。 詳細については、「オブジェクトとクラス」と「インターフェイス」を参照してください。

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

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

ルール

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

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

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

  • メンバー修飾子。 モジュール メンバーを定義するときにアクセス修飾子を使用することはできず、Shared または Overloads を除く任意のプロシージャ修飾子を指定することもできません。 Shadows で任意のメンバーを宣言できます。また、プロパティを定義するときに Default のほか、ReadOnlyWriteOnly を使用することもできます。

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

    インターフェイスは、より制限の厳しいアクセス レベルの別のインターフェイスから継承することはできません。 たとえば、Public インターフェイスは、Friend インターフェイスから継承することはできません。

    インターフェイスは、その中に入れ子にされたインターフェイスから継承することはできません。

  • 実装: クラスで Implements ステートメントを使用してこのインターフェイスを実装する場合は、インターフェイス内に定義されているすべてのメンバーを実装する必要があります。 さらに、実装するコード内の各シグネチャが、このインターフェイスで定義されている対応するシグネチャと正確に一致する必要があります。 ただし、実装するコード内のメンバーの名前が、インターフェイスで定義されているメンバー名と一致する必要はありません。

    クラスでプロシージャを実装している場合、プロシージャを Shared として指定することはできません。

  • 既定のプロパティ。 インターフェイスでは、プロパティ名を使用せずに参照できる、既定のプロパティとして、最大で 1 つのプロパティを指定できます。 このようなプロパティを指定するには、Default 修飾子を使用して宣言します。

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

動作

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

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

    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 にプライベート アクセス権が与えられます。

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

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

  • [Lifetime](有効期間)。 インターフェイス自体には、有効期間やメンバーがありません。 クラスでインターフェイスを実装し、そのクラスのインスタンスとしてオブジェクトが作成される場合、そのオブジェクトには、それが実行されているアプリケーション内での有効期間があります。 詳細については、「Class ステートメント」の「有効期間」を参照してください。

次の例では、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 で終わるブロックを取り込んでいないことに注意してください。 このインターフェイスでは、そのメンバーのシグネチャのみを定義しています。 完全な PropertyFunction のブロックは、thisInterface を実装するクラスに存在します。

関連項目