0

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

代码:

Dim Class2 as new SecondClass()

改为

Dim Class2 as FirstClass
Class2 = New SecondClass()

问题: 这是根据《VB.NET 开发人员手册》的作者所说的 OOP 最强大的工具之一。但为什么?谁能给我解释一下。

为什么我应该将 Class2 声明为 FirstClass 并将此对象变量分配给 SecondClass 的实例?

4

2 回答 2

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)
于 2013-10-30T13:43:09.827 回答
0

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

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

if (dataObject.GetType().Name == "FirstClass")
{
    dataObject.FirstMethod();
}
else if (dataObject.GetType().Name == "SecondClass")
{
    dataObject.FirstMethod();
    dataObject.SecondMethod();
}
于 2013-10-30T13:37:12.033 回答