インターフェイスの名前を宣言し、インターフェイスが構成するメンバーの定義を紹介します。
構文
[ <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 |
任意。 次のいずれかを指定できます。 - 公共 - 保護 - 友人 - プライベート - 保護されたフレンド - Private Protected Visual Basic のアクセス レベルを参照してください。 |
Shadows |
任意。 「 影」を参照してください。 |
name |
必須。 このインターフェイスの名前。 「宣言された要素名」を参照してください。 |
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 定義を終了します。 |
注釈
インターフェイスは、クラスと構造体が実装できる一連のメンバー (プロパティやプロシージャなど) を定義します。 インターフェイスでは、メンバーのシグネチャのみが定義され、内部の動作は定義されません。
クラスまたは構造体は、インターフェイスによって定義されたすべてのメンバーにコードを提供することによって、インターフェイスを実装します。 最後に、アプリケーションがそのクラスまたは構造体からインスタンスを作成すると、オブジェクトが存在し、メモリ内で実行されます。 詳細については、「オブジェクトとクラスとインターフェイス」を参照してください。
Interface
は、名前空間またはモジュール レベルでのみ使用できます。 つまり、インターフェイスの 宣言コンテキスト は、ソース ファイル、名前空間、クラス、構造体、モジュール、またはインターフェイスである必要があり、プロシージャまたはブロックにすることはできません。 詳細については、「 宣言コンテキストと既定のアクセス レベル」を参照してください。
インターフェイスの既定値は Friend アクセスです。 アクセス修飾子を使用してアクセス レベルを調整できます。 詳細については、「 Visual Basic のアクセス レベル」を参照してください。
準則
インターフェイスの入れ子。 1 つのインターフェイスを別のインターフェイス内で定義できます。 外部インターフェイスは 包含インターフェイスと呼ばれ、内部インターフェイスは 入れ子になったインターフェイスと呼ばれます。
メンバー宣言。 プロパティまたはプロシージャをインターフェイスのメンバーとして宣言する場合は、そのプロパティまたはプロシージャの シグネチャ のみを定義します。 これには、要素の型 (プロパティまたはプロシージャ)、そのパラメーターとパラメーターの型、および戻り値の型が含まれます。 このため、メンバー定義では 1 行のコードのみが使用され、
End Function
やEnd Property
などの終了ステートメントはインターフェイスでは無効です。これに対し、列挙型または構造体、または入れ子になったクラスまたはインターフェイスを定義する場合は、それらのデータ メンバーを含める必要があります。
メンバー修飾子。 モジュール メンバーを定義するときにアクセス修飾子を使用することも、オーバーロード以外の Shared またはプロシージャ修飾子を指定することもできません。 Shadows を使用して任意のメンバーを宣言できます。また、プロパティを定義するときに Default を使用できます。また、ReadOnly または WriteOnly も使用できます。
継承。 インターフェイスで Inherits ステートメントを使用する場合は、1 つ以上の基本インターフェイスを指定できます。 それぞれが同じ名前のメンバーを定義している場合でも、2 つのインターフェイスから継承できます。 その場合、実装するコードでは、実装するメンバーを指定するために名前修飾を使用する必要があります。
インターフェイスは、より制限の厳しいアクセス レベルを持つ別のインターフェイスから継承できません。 たとえば、
Public
インターフェイスは、Friend
インターフェイスから継承できません。インターフェイスは、その中に入れ子になったインターフェイスから継承できません。
実装。 クラスで Implements ステートメントを使用してこのインターフェイスを実装する場合は、インターフェイス内で定義されているすべてのメンバーを実装する必要があります。 さらに、実装コード内の各シグネチャは、このインターフェイスで定義されている対応するシグネチャと完全に一致する必要があります。 ただし、実装コード内のメンバーの名前は、インターフェイスで定義されているメンバー名と一致する必要はありません。
クラスがプロシージャを実装している場合、プロシージャを
Shared
として指定することはできません。既定のプロパティ。 インターフェイスでは、プロパティ名を使用せずに参照できる 既定のプロパティとして、最大 1 つのプロパティを指定できます。 このようなプロパティを指定するには、 Default 修飾子を使用して宣言します。
これは、インターフェイスが既定のプロパティを継承しない場合にのみ定義できることを意味します。
行動
アクセス レベル。 すべてのインターフェイス メンバーは、暗黙的に パブリック アクセス権を持ちます。 メンバーを定義するときにアクセス修飾子を使用することはできません。 ただし、インターフェイスを実装するクラスは、実装されている各メンバーのアクセス レベルを宣言できます。
クラス インスタンスを変数に割り当てる場合、そのメンバーのアクセス レベルは、変数のデータ型が基になるインターフェイスか実装クラスかによって異なります。 次に例を示します。
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 ステートメントの「有効期間」を参照してください。
例
次の例では、 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
を実装するクラスに表示されます。
こちらも参照ください
.NET