MSDN中接口的概述: 和类一样,接口也定义了一系列的属性,方法,和事件。但是与类不同的是,接口并不提供实现。它们由类来实现,并从类中被定义为单独的实体。接口表示一种约定,实现接口的类必须严格按照其定义来实现接口的每个方面。有了接口,就可以将功能定义为一些紧密地相关成员的小组。可以在不危害有代码的情况下。开发接口的增强型实现,从而使兼容性问题最小化。也可以在任何时候通过开发附加接口和实现来添加新的功能。虽然接口实现可以进化,但接口本身一旦被发布就不能再更改。对已发布的借口进行更改会破坏现有的代码。若把接口视为约定,很明显约定双方都各有其承担的义务。接口的发布者同意不在更改接口,接口的实现者则同意严格按照设计来实现接口。
接口描述了属性、方法和事件的特性,但是却将实现的细节留给了结构或类。
本演练将说明如何声明和实现一个接口。
定义一个接口
- 通过在“文件”菜单上单击“新建”,然后单击“项目”,打开一个新的“Windows 应用程序”项目。将出现“新建项目”对话框。
- 在“项目类型”窗格中选择“Visual Basic 项目”。
- 从 Visual Basic 项目模板的列表中选择“Windows 应用程序”。
- 通过单击“项目”菜单上的“添加模块”向属性中添加一个新的模块。
- 将新的模块命名为
Module1.vb
并单击“打开”。显示该新模块的代码。 - 在
Module1
内,通过在 Module 和 End Module 语句之间键入Interface MyInterface
,然后按 ENTER 键来定义一个名为MyInterface
的接口。代码编辑器将缩进 Interface 关键字并添加一个 End Interface 语句以形成代码块。 - 通过在 Interface 和 End Interface 语句之间放置以下代码,定义该接口的属性、方法和事件:
Property Prop1() As Integer Sub Method1(ByVal X As Integer) Event Event1()
您可能注意到,用于声明接口成员的语法与用于声明类成员的语法是不同的。这一差别反映了这样一个事实,即接口不能包含实现代码。
实现接口
- 将以下代码添加到
Module1
中的End Interface
语句之后,但在End Module
语句之前,从而添加名为ImplementationClass
的类,然后按下 ENTER 键:Class ImplementationClass
如果您使用的是集成开发环境,按下 ENTER 键时代码编辑器将提供一条相应的
End Class
语句。 - 将以下 Implements 语句添加到
ImplementationClass
中,这一操作将命名该类实现的接口:Implements MyInterface
当在类或结构顶部分别列出了其他项的 Implements 语句时,该语句表示类或结构将实现某个接口。如果您使用的是集成开发环境,代码编辑器会在
MyInterface
下添加下划线,警告您该类必须实现MyInterface
接口的所有成员。此演练中的下两个步骤将根据这条警告实现这些成员。 - 将以下代码添加到
ImplementationClass
中以实现Event1
。Event Event1() Implements MyInterface.Event1
该代码包含一个用于实现
Event1
的 Event 语句,以及一个命名该接口和要实现的接口成员的 Implements 语句。 - 将以下代码添加到
ImplementationClass
中以实现接口的剩余成员:Private pval As Integer ' Holds the value of the property. Property Prop1() As Integer Implements MyInterface.Prop1 Get Return pval End Get Set(ByVal Value As Integer) pval = Value End Set End Property Sub Method1(ByVal X As Integer) Implements MyInterface.Method1 MsgBox("The X parameter for Method1 is " & X) RaiseEvent Event1() ' Add more code to implement this method. End Sub
对于该代码中要实现的每个成员,都有一个表示接口和要实现的成员名称的 Implements 语句。
测试接口的实现
- 在“解决方案资源管理器”中,右击项目的启动窗体,并单击“查看代码”。编辑器将显示启动窗体的类。默认情况下,启动窗体称作
Form1
。 - 将以下事件处理程序添加到
Form1
类中,以处理ImplementationClass
的实例引发的事件:Sub EventHandler() MsgBox("The event handler caught the event.") End Sub
- 将一个命名为
Test
的子例程添加到Form1
类中以测试实现类:Sub Test() ' Create an instance of the class. Dim T As New ImplementationClass() ' Create a variable of type MyInterface. Dim I As MyInterface ' Assign the class instance to the interface. ' Calls to the interface members are ' executed through the class instance. I = T ' Associate an event handler with an event raised by the object. AddHandler I.Event1, AddressOf EventHandler I.Prop1 = 9 'Set a property. MsgBox("Prop1 was set to " & I.Prop1) ' Read the property. ' Test the method and raise an event. I.Method1(5) End Sub
Test
过程可创建实现MyInterface
的类的一个实例,创建一个接口类型的变量,将事件处理程序与由实例引发的事件关联,设置属性并通过接口运行一个方法。 - 添加代码可以从启动窗体的
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”。