演练:创建和实现接口 (Visual Basic)
接口描述了属性、方法和事件的特性,但是却将实现的细节留给了结构或类。
本演练将说明如何声明和实现一个接口。
提示
对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您所使用的 Visual Studio 版本和您所使用的设置。有关更多信息,请参见 Visual Studio 设置。
定义一个接口
打开一个新的 Visual Basic Windows 应用程序项目。
在**“项目”菜单上,单击“添加模块”**,向项目中添加一个新的模块。
将新的模块命名为 Module1.vb,然后单击**“添加”**。 显示该新模块的代码。
通过在 Module1 内的 Module 和 End Module 语句之间键入 Interface TestInterface,然后按 Enter 来定义一个名为 TestInterface 的接口。 **“代码编辑器”**将缩进 Interface 关键字并添加一个 End Interface 语句来形成代码块。
通过在 Interface 和 End Interface 语句之间放置以下代码,定义该接口的属性、方法和事件:
Property Prop1() As Integer Sub Method1(ByVal X As Integer) Event Event1()
实现
您可能注意到,用于声明接口成员的语法与用于声明类成员的语法是不同的。 这一差别反映了这样一个事实,即接口不能包含实现代码。
实现接口
将以下语句添加到 Module1 中的 End Interface 语句之后,但在 End Module 语句之前,然后按下 Enter,从而添加一个名为 ImplementationClass 的类:
Class ImplementationClass
如果您使用的是集成开发环境,按下 Enter 时**“代码编辑器”**将提供一条匹配的 End Class 语句。
将以下 Implements 语句添加到 ImplementationClass 中,这一操作将命名该类实现的接口:
Implements TestInterface
当在类或结构顶部分别列出了其他项的 Implements 语句时,该语句表示类或结构将实现某个接口。
如果您使用的是集成开发环境,按下 Enter 时**“代码编辑器”**将实现 TestInterface 需要的类成员,然后可以跳过下一步。
如果您使用的不是集成开发环境,则必须实现 MyInterface 接口的所有成员。 将以下代码添加到 ImplementationClass 中以实现 Event1、Method1 和 Prop1:
Event Event1() Implements TestInterface.Event1 Public Sub Method1(ByVal X As Integer) Implements TestInterface.Method1 End Sub Public Property Prop1() As Integer Implements TestInterface.Prop1 Get End Get Set(ByVal value As Integer) End Set End Property
Implements 语句指定要实现的接口和接口成员。
通过向存储属性值的类中添加一个私有字段,完成 Prop1 的定义:
' Holds the value of the property. Private pval As Integer
从属性 get 访问器返回 pval 的值。
Return pval
在属性 set 访问器中设置 pval 的值。
pval = value
通过添加以下代码完成 Method1 的定义。
MsgBox("The X parameter for Method1 is " & X) RaiseEvent Event1()
测试接口的实现
在**“解决方案资源管理器”中,右击项目的启动窗体,再单击“查看代码”**。 编辑器将显示启动窗体的类。 默认情况下,启动窗体称为 Form1。
将以下 testInstance 字段添加到 Form1 类中:
Dim WithEvents testInstance As TestInterface
通过将 testInstance 声明为 WithEvents,Form1 类可以处理其事件。
将以下事件处理程序添加到 Form1 类中,以处理由 testInstance 引发的事件:
Sub EventHandler() Handles testInstance.Event1 MsgBox("The event handler caught the event.") End Sub
将一个命名为 Test 的子例程添加到 Form1 类中以测试实现类:
Sub Test() ' Create an instance of the class. Dim T As New ImplementationClass ' Assign the class instance to the interface. ' Calls to the interface members are ' executed through the class instance. testInstance = T ' Set a property. testInstance.Prop1 = 9 ' Read the property. MsgBox("Prop1 was set to " & testInstance.Prop1) ' Test the method and raise an event. testInstance.Method1(5) End Sub
Test 过程创建实现 MyInterface 的类的一个实例,并将该实例赋给 testInstance 字段,设置一个属性,然后通过该接口运行一个方法。
添加代码以从启动窗体的 Form1 Load 过程中调用 Test 过程:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Test() ' Test the class. End Sub
按 F5 运行 Test 过程。 显示消息“Prop1 was set to 9”。 单击“确定”之后,将显示消息“The X parameter for Method1 is 5”。 单击“确定”,将显示消息“The event handler caught the event”。