多态性 - 为什么将对象变量声明为Base并分配派生类

时间:2013-10-30 13:34:06

标签: .net vb.net polymorphism

主题: 的 我尝试理解以下示例的多态性和绝望(First Class是基类,第二个类是派生类):

代码:

Dim Class2 as new SecondClass()

更改为

Dim Class2 as FirstClass
Class2 = New SecondClass()

问题: 的 这是根据" VB.NET Developer Book" OOP最强大的工具之一。但为什么?任何人都可以向我解释。

为什么我要将Class2声明为FirstClass并将此objectvariable分配给SecondClass的实例?

2 个答案:

答案 0 :(得分:0)

简短的回答:因为那时你可以将一个SecondClass对象传递给一个只知道FirstClass对象的函数,但仍然可以获得它专用的方法的SecondClass bevavior。

长答案:多态性使我们能够以高度可维护的方式捕获与不同数据类型相关的特殊功能,并支持重用。获取该专用逻辑的替代方法是让OtherFunction使用if-then检查数据类型,并在每个对象上调用适当的方法以获得该情况的“正确”行为:

if (dataObject.GetType().Name == "FirstClass")
{
    dataObject.FirstMethod();
}
else if (dataObject.GetType().Name == "SecondClass")
{
    dataObject.FirstMethod();
    dataObject.SecondMethod();
}

答案 1 :(得分:0)

使用变量的示例并不是理解此概念的最佳示例。多态性很强大,因为它允许您创建一个绑定到一般形式(BaseClass)的算法,同时能够在从该表单派生的任何对象上运行。
想一个对整数进行排序的算法。排序项目时的一个重要步骤是比较它们。您可以以对整数进行特定实现的方式实现此目的。该算法仅适用于整数而不是其他任何内容。

Public Function Sort(l As List(Of Integer)) As List(Of Integer)

但是如果你以一种可以在任何可以将自己与同一类型的另一个对象相比较的对象上运行的方式定义算法,那么算法就会更加通用并且可以轻松地减少。在这种情况下,您可以定义一个界面IComparable,让算法工作在这个接口。然后,您可以使用该算法对实现IComparable的对象的任何集合进行排序。

Public Function Sort(l As List(Of IComparable)) As List(Of Integer)
相关问题