菜鸟问题:什么叫接口?哪些地方能用得上?

tihua 2005-02-19 10:02:32
如果可以,请例举一些简单的例子,不胜感激,谢谢!
能帮我深入一点了解的另开贴给分。
...全文
267 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tihua 2005-02-21
  • 打赏
  • 举报
回复
毕竟是刚学,所看到的不能理解,先放一边吧,谢谢各位
echoxue 2005-02-19
  • 打赏
  • 举报
回复
up
sdtysdu 2005-02-19
  • 打赏
  • 举报
回复
up
AllenTing 2005-02-19
  • 打赏
  • 举报
回复
http://dev.csdn.net/develop/article/28/28369.shtm
AllenTing 2005-02-19
  • 打赏
  • 举报
回复
http://shclub.w22.bizcn.com/shadow/Article_Show.asp?ArticleID=672
loveerror 2005-02-19
  • 打赏
  • 举报
回复
说得简单一点,接口就是一个外在表现.比如接口里定义一个方法 Add, 在多个类中都可以实现这个接口,然后每个实现的类都有一个Add方法,但是所做的事是不一样的.
不知道说清楚没有.^_^
lgg06 2005-02-19
  • 打赏
  • 举报
回复
如果刚学,我觉得可以先跳过,毕竟没有一定功底不好理解,也不会用到
tihua 2005-02-19
  • 打赏
  • 举报
回复
大哥,能否用你所了解的情况作一个简单点的解释,对于msdn的文档我看不太明白(刚学呀),
机器人 2005-02-19
  • 打赏
  • 举报
回复
多态性是类为方法(这些方法以相同的名称调用)提供不同实现方式的能力。多态性允许对类的某个方法进行调用而无需考虑该方法所提供的特定实现。例如,可能有名为 Road 的类,它调用另一个类的 Drive 方法。这另一个类 Car 可能是 SportsCar 或 SmallCar,但二者都提供 Drive 方法。虽然 Drive 方法的实现因类的不同而异,但 Road 类仍可以调用它,并且它提供的结果可由 Road 类使用和解释。

可以用不同的方式实现组件中的多态性:

接口多态性 - 多个类可实现相同的“接口”,而单个类可以实现一个或多个接口。接口本质上是类需要如何响应的定义。接口描述类需要实现的方法、属性和事件,以及每个成员需要接收和返回的参数类型,但将这些成员的特定实现留给实现类去完成。
继承多态性 - 多个类可以从单个基类“继承”。通过继承,类在基类所在的同一实现中接收基类的所有方法、属性和事件。这样,便可根据需要来实现附加成员,而且可以重写基成员以提供不同的实现。请注意,继承类也可以实现接口,这两种技术不是互相排斥的。
通过抽象类实现的多态性 - 抽象类同时提供继承和接口的元素。抽象类本身不能实例化,它必须被继承。该类的部分或全部成员可能未实现,该实现由继承类提供。已实现的成员仍可被重写,并且继承类仍可以实现附加接口或其他功能。

接口多态性
组件编程中的一项强大技术是能够在一个对象上实现多个接口。每个接口由一小部分紧密联系的方法、属性和事件组成。通过实现接口,组件可以为要求该接口的任何其他组件提供功能,而无需考虑其中所包含的特定功能。这使后续组件的版本得以包含不同的功能而不会干扰核心功能。

其他开发人员最常使用的组件功能自然是组件类本身的成员。然而,包含大量成员的组件使用起来可能比较困难。可以考虑将组件的某些功能分解出来,作为私下实现的单独接口。

根据接口来定义功能的另一个好处是,可以通过定义和实现附加接口增量地将功能添加到组件中。优点包括:

简化了设计过程,因为组件开始时可以很小,具有最小功能;之后,组件继续提供最小功能,同时不断插入其他的功能,并通过实际使用那些功能来确定合适的功能。
简化了兼容性的维护,因为组件的新版本可以在添加新接口的同时继续提供现有接口。客户端应用程序的后续版本可以利用这些接口的优点(如果这样做有意义)。

选择将功能设计为接口还是抽象类(在 Visual Basic 中为 MustInherit 类)有时是一件困难的事。“抽象类”是一种不能实例化而必须从中继承的类。抽象类可以完全实现,但更常见的是部分实现或者根本不实现,从而封装继承类的通用功能。有关详细信息,请参见抽象类。

相反,“接口”是完全抽象的成员集合,可以被看作是为操作定义合同。接口的实现完全留给开发者去做。

接口和抽象类对组件交互都很有用。如果一个方法要求一个参数形式的接口,则任何实现该接口的对象都可以用在该参数中。例如:

' Visual Basic
Public Sub Spin (ByVal widget As IWidget)
End Sub
// C#
public void Spin (IWidget widget)
{}
此方法可以接受任何将 IWidget 实现为小部件参数的对象,即使 IWidget 的实现可能相差很大。抽象类也允许这种多态性,但须注意以下几点:

类可能只是从一个基类继承,所以如果要使用抽象类为一组类提供多态性,这些类必须都是从那个类继承的。
抽象类还可能提供已实现的成员。因此,可以用抽象类确保特定数量的相同功能,但不能用接口这样做。
这里是一些建议,帮助您决定使用接口还是抽象类为组件提供多态性。

如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单易行的方法来控制组件版本。通过更新基类,所有继承类都随更改自动更新。另一方面,接口一旦创建就不能更改。如果需要接口的新版本,必须创建一个全新的接口。
如果创建的功能将在大范围的全异对象间使用,则使用接口。抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。
如果要设计小而简练的功能块,则使用接口。如果要设计大的功能单元,则使用抽象类。
如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。抽象类允许部分实现类,而接口不包含任何成员的实现。

具体请参考msdn的文档和示例

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧