十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
dim objEye as IEye = new Eye(); '用接口型引用,new 实现类的对象。
10年积累的成都网站建设、做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有吉林免费网站建设让你可以放心的选择与我们合作。
messagebox.show(objEye.IEye) '调用属性
分类: 电脑/网络 程序设计 其他编程语言
问题描述:
在。NET高级概念中接口是什么啊?有哪个知道啊?
解析:
和类一样,接口也定义了一系列属性、方法和事件。但与类不同的是,接口并不提供实现。它们由类来实现,并从类中被定义为单独的实体。
接口表示一种约定,实现接口的类必须严格按其定义来实现接口的每个方面。
有了接口,就可以将功能定义为一些紧密相关成员的小组。可以在不危害现有代码的情况下,开发接口的增强型实现,从而使兼容性问题最小化。也可以在任何时候通过开发附加接口和实现来添加新的功能。
虽然接口实现可以进化,但接口本身一旦被发布就不能再更改。对已发布的接口进行更改会破坏现有的代码。若把接口视为约定,很明显约定双方都各有其承担的义务。接口的发布者同意不再更改该接口,接口的实现者则同意严格按设计来实现接口。
创建接口
通过为接口添加代码对其进行定义,这些代码以 Interface 关键字及接口名称开始,以 End Interface 语句结束。例如,下面的代码定义了一个名为 IAsset 的接口。
Interface IAsset
End Interface
添加定义接口所支持的属性、方法和事件的语句。例如,下面的代码定义了一个函数、一个属性和一个事件。
Interface IAsset
Event ComittedChange(ByVal Success As Boolean)
Property Division() As String
Function GetID() As Integer
End Interface
实现接口
如果正在实现的接口不是项目的一部分,则添加一个对包含该接口的程序集的引用。
创建实现接口的新类,并将 Implements 关键字加入该类名后面的行中。例如,要实现 IAsset 接口,可以将实现类命名为 Computer,如以下代码所示。
Class Computer
Implements IAsset
End Class
为实现类的属性、方法和事件添加过程,如以下代码所示,该段代码是建立在上一步的示例基础上的:
的:
Class Computer
Implements IAsset
Public Event ComittedChange(ByVal Success As Boolean) _
Implements IAsset.ComittedChange
Private divisionValue As String
Public Property Division() As String _
Implements IAsset.Division
Get
Return divisionValue
End Get
Set(ByVal value As String)
divisionValue = value
RaiseEvent ComittedChange(True)
End Set
End Property
Private IDValue As Integer
Public Function GetID() As Integer _
Implements IAsset.GetID
Return IDValue
End Function
Public Sub New(ByVal Division As String, ByVal ID As Integer)
Me.divisionValue = Division
Me.IDValue = ID
End Sub
End Class
在VB.NET的类里,实现一个接口的语句是:
implements接口名称
例如,下面定义一个车(总称)的接口,这里的车是各种车的总称:
Public Interface ICar
Property color() As String
Property speed() As Long
Sub PrintInfo()
End Interface
然后在不同类型的“车”类里实现它:
Public Class A_Car
Implements ICar
Dim m_color As String, m_speed As Long
Public Property color() As String Implements ICar.color
Get
Return m_color
End Get
Set(ByVal Value As String)
m_color = Value
End Set
End Property
Protected Overrides Sub Finalize()
MsgBox(I was deconstructed!)
End Sub
Public Sub New()
m_color = Red
m_speed = 210
MsgBox(I was constructed!)
End Sub
Public Property speed() As Long Implements ICar.speed
Get
Return m_speed
End Get
Set(ByVal Value As Long)
m_speed = speed
End Set
End Property
Public Sub PrintInfo() Implements ICar.PrintInfo
MsgBox(Color: m_color vbNewLine Speed: m_speed, MsgBoxStyle.Information)
End Sub
End Class
在 Form 的 Load 事件中编写:
Dim myCar As New A_Car
myCar.PrintInfo()
运行之后就创建了一个 A_Car 类的实例 myCar,然后出现两个对话框,分别说明实例已经创建和汽车的信息。当窗体卸载时,这个类的实例 myCar 将自动销毁,这时将出现一个“I was deconstructed!”的对话框。
声明一个接口时,需要考虑以下几点:
1.接口主体只限于对方法,索引器以及属性的声明;
2.接口成员是隐式公开的,如果对其显式指定访问级别,就会出现编译器错误;
3.接口中不能包含字段,构造函数和常量等;
4.在接口中不能实现任何方法,属性或者索引器;
5.在指定方法时,只需要给出返回类型,名称和参数列表,然后分号结束。
面向对象的接口
在C++中,一个类被允许继承多个类。但是在Java以后的语言不被允许。
这样,如果想继承多个类时便非常困难。所以开发方想出了新办法:接口。
一个接口内,允许包含变量、常量等一个类所包含的基本内容。但是,接口中的函数不允许设定代码,也就意味着不能把程序入口放到接口里。由上可以理解到,接口是专门被继承的。接口存在的意义也是被继承。和C++里的抽象类里的纯虚函数是相同的。不能被实例化。
定义接口的关键字是interface,例如:
publicinterfaceMyInterface{
public void add(int x,int y);
public void volume(int x,int y,int z);
}
继承接口的关键字是implements,相当于继承类的extends。
需要注意的是,当继承一个接口时,接口里的所有函数必须全部被覆盖。例如:
class Demo implements MyInterface{
public void add(int x,int y){
System.out.println( +(x+y));
}
public void volume(int x,int y,int z){
System.out.println( +(x*y*z));
}
public static void main(String args[]){
Demo d=new Demo();
d.add(10,20);
d.volume(10,10,10);
}
}
输出结果:
30
1000
当想继承多个类时,开发程序不允许,报错。这样就要用到接口。因为接口允许多重继承(,),而类不允许。所以就要用到接口。
接口可以实现的是多态性,类似抽象类,需要在具体的类中实现,在具体的类中实现
定义周长接口的目的是为了把"周长接口"作为一自定义函数的参数
下面图片是一个求面积的接口例子,一看就明白了(重点看画圈的地方)