声明接口的名称,并引入接口包含的成员的定义。
语法
[ <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 |
可选。 可以是以下值之一: - 公共 - 保护 - 朋友 - 私人 - 受保护的好友 - 专用保护 请参阅 Access levels in Visual Basic。 |
Shadows |
可选。 请参阅 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
。 这意味着接口的 声明上下文 必须是源文件、命名空间、类、结构、模块或接口,不能是过程或块。 有关详细信息,请参阅 声明上下文和默认访问级别。
接口默认为 好友 访问。 可以使用访问修饰符调整其访问级别。 有关详细信息,请参阅 Visual Basic 中的 Access 级别。
规则
嵌套接口。 可以在另一个接口中定义一个接口。 外部接口称为 包含接口,内部 接口称为嵌套接口。
成员声明。 将属性或过程声明为接口的成员时,仅定义该属性或过程的 签名 。 这包括元素类型(属性或过程)、其参数和参数类型以及其返回类型。 因此,成员定义只使用一行代码,并且终止语句(例如
End Function
或End Property
无效)在接口中有效。相比之下,定义枚举或结构或嵌套类或接口时,必须包括其数据成员。
成员修饰符。 定义模块成员时,不能使用任何访问修饰符,也不能指定 “共享 ”或任何过程修饰符( 重载除外)。 可以使用 Shadows 声明任何成员,并在定义属性以及 ReadOnly 或 WriteOnly 时使用 Default。
遗产。 如果接口使用 Inherits 语句,则可以指定一个或多个基接口。 即使两个接口都定义了具有相同名称的成员,也可以从两个接口继承。 如果这样做,则实现代码必须使用名称限定来指定它正在实现的成员。
接口不能从具有更严格的访问级别的另一个接口继承。 例如,接口
Public
无法从Friend
接口继承。接口不能从嵌套在它的接口继承。
实现。 当类使用 Implements 语句实现此接口时,它必须实现接口中定义的每个成员。 此外,实现代码中的每个签名必须完全匹配此接口中定义的相应签名。 但是,实现代码中成员的名称不必与接口中定义的成员名称匹配。
当类实现过程时,它不能将过程指定为
Shared
。默认属性。 接口最多可以将一个属性指定为 默认属性,无需使用属性名称即可引用该属性。 通过使用 默认 修饰符声明该属性来指定此类属性。
请注意,这意味着仅当接口继承无时,接口才能定义默认属性。
行为
访问级别。 所有接口成员都隐式具有 公共 访问权限。 定义成员时,不能使用任何访问修饰符。 但是,实现接口的类可以为每个已实现的成员声明访问级别。
如果将类实例分配给变量,则其成员的访问级别可以取决于变量的数据类型是基础接口还是实现类。 下面的示例对此进行了演示。
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
具有专用访问权限。范围。 接口在其命名空间、类、结构或模块范围内。
每个接口成员的范围都是整个接口。
一生。 接口本身没有生存期,也没有其成员。 当类实现接口和对象作为该类的实例创建时,该对象在运行它的应用程序中具有生存期。 有关详细信息,请参阅 类语句中的“生存期”。
示例:
以下示例使用Interface
语句定义一thisInterface
个名为的接口,该接口必须使用语句和Function
语句实现Property
。
Public Interface thisInterface
Property ThisProp(ByVal thisStr As String) As Char
Function ThisFunc(ByVal thisInt As Integer) As Integer
End Interface
请注意,Property
和Function
语句不会引入以接口结尾和End Function
在接口内结束End Property
的块。 该接口仅定义其成员的签名。 完整 Property
块显示在 Function
实现的 thisInterface
类中。