2011-03-08 40 views

回答

1

接口和多态不是特定于任何语言,而是用于对问题和解决方案空间进行建模的概念。所有面向对象的语言都提供了一种方法来实现或实现与这些概念紧密匹配的代码。

在看什么之前?让我们简单看看你为什么需要它们?以及它们如何有用。接口的

简单的例子是“汽车”始终有相同的接口断裂,加速,一旦你知道如何来驱动一个你可以驾驶任何汽车。因此,如果一个人(解决方案)获得这个统一的汽车界面,而不管他能驾驶哪种车型和车型,那就是为什么你几乎可以驾驶任何汽车。当您编写代码来解决某个特定类别的问题时,您可以将解决方案重复用于提供类似接口的多个域或对象。

多态性简单的例子,看看帐户(可以检查或保存假设每个吸引不同股息)你走进一家银行,并要求出纳什么是我的平衡?或分红?你不需要指定你有什么样的帐户,他会在内部找出他的书籍并提供详细信息。有关每个案例(检查和储蓄)的出纳员工作方式的内部细节对于您而言都是隐藏的,任何人都可以走进来问问题并获得适合有关人员的答案。所以出纳员是多形的(他正在改变他的工作规则或形式)以适合客户。

接口,如汽车例如提供一份合同,你坚持该合同一组解决方案,可只要有问题接口同样适用于其他域中的对象的工作,只要。 Interfaces promote reuse of solutions by making them generic.只要你有信用卡,你可以喝啤酒种类,你不需要为每种信用卡有特别的酒吧。

多态性像在柜员帐户示例Promote reuse of interface or messages by reusing same message or interface to provide different but semantically equivalent mechanisms。你拿起你的电话并拨打一个号码,不管目的地号码是固定电话还是手机还是别的什么地方,这里拨号10位数字的接口在每个语义上相同的机制中都被重复使用。现在

你可以继续查找一些接口在VB。NET或PHP,我不是很了解这些语言

看看方式Controls(VB.NET)对类似方法作出反应,以查看多态性的行动。接口查找实现IEnumerable(从上面的答案),或ISerializable和实现它们的对象。

0

嗯,你已经使用的接口,如果你曾经使用过For Each循环。编译器知道关于IEnumerable(Of T)接口,所以它能够通过调用GetEnumerator()得到一个IEnumerator(Of T)遍历任何序列,然后调用MoveNext()Current反复读取序列的元素。无论你是在迭代List(Of T)LinkedList(Of T)HashSet(Of T)还是其他什么都可以。你只能依靠接口。 LINQ to Objects也基于此(尽管对其他接口类型进行了一些特定的优化)。

对于多态性,我通常使用Stream,例如,编写使用任何Stream而不关心它是否实际上是FileStreamNetworkStreamMemoryStream或其他的代码很容易。流实现将覆盖适当的成员,使其“只是工作”。