您的位置:首页 > 其它

对于.NET中接口的理解

2007-03-07 18:29 417 查看
MSDN中接口的概述: 和类一样,接口也定义了一系列的属性,方法,和事件。但是与类不同的是,接口并不提供实现。它们由类来实现,并从类中被定义为单独的实体。接口表示一种约定,实现接口的类必须严格按照其定义来实现接口的每个方面。有了接口,就可以将功能定义为一些紧密地相关成员的小组。可以在不危害有代码的情况下。开发接口的增强型实现,从而使兼容性问题最小化。也可以在任何时候通过开发附加接口和实现来添加新的功能。虽然接口实现可以进化,但接口本身一旦被发布就不能再更改。对已发布的借口进行更改会破坏现有的代码。若把接口视为约定,很明显约定双方都各有其承担的义务。接口的发布者同意不在更改接口,接口的实现者则同意严格按照设计来实现接口。

在项目开发过程中:你们的项目经理写好了一大堆接口,然后对你们说:OK,你们的工作就是写代码实现我的接口。这时候,在.NET中往往用类来实现接口。。
以下是msdn上面的材料

演练:创建和实现接口

接口描述了属性、方法和事件的特性,但是却将实现的细节留给了结构或类。

本演练将说明如何声明和实现一个接口。

定义一个接口

通过在“文件”菜单上单击“新建”,然后单击“项目”,打开一个新的“Windows 应用程序”项目。将出现“新建项目”对话框。

在“项目类型”窗格中选择“Visual Basic 项目”。

从 Visual Basic 项目模板的列表中选择“Windows 应用程序”。

通过单击“项目”菜单上的“添加模块”向属性中添加一个新的模块。

将新的模块命名为
Module1.vb
并单击“打开”。显示该新模块的代码。

Module1
内,通过在 Module End Module 语句之间键入
Interface MyInterface
,然后按 ENTER 键来定义一个名为
MyInterface
的接口。代码编辑器将缩进 Interface 关键字并添加一个 End Interface 语句以形成代码块。

通过在 InterfaceEnd 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”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: