【发布时间】:2014-09-04 22:18:45
【问题描述】:
我有一个 VB.Net 应用程序,它根据条件将两个类之一分配给一个变量。目前,我正在使用非常直接的后期绑定来执行此操作。我正在寻找任何其他可能提高性能的解决方案。
简化示例,我有 CAT 和 DOG 类,它们都继承自 ANIMAL 类。我的代码如下所示:
Dim Pet as Object
Dim Allergic as Boolean = True
If Allergic then
Pet = New DOG
Else
Pet = New CAT
End If
If Allergic then
Pet.Bark
Pet.Fetch
Else
Pet.Meow
Pet.UseLitterBox
End Else
无论如何要这样做,以便我可以尽早绑定到分配的 ANIMAL 子类?
【问题讨论】:
-
动态调度与后期绑定不同。将宠物声明为动物。使用带有 Overridable 或 MustOverride 关键字的多态性。任何有关 VB.NET 编程的介绍性书籍都会教你如何做到这一点。
-
我理解您所指的概念。我想我需要包括更多细节。派生类都具有许多与基类或彼此不同的方法和属性。我是否需要在基类中为所有这些方法创建可覆盖/必须覆盖的方法 - 即,如果我想从 Pet 对象调用任何一个,我是否需要向 ANIMAL 类添加可覆盖的“Meow”和“Bark”方法?还是有更简单的方法?
-
使用您的示例,如果您有一只狗并且它继承自动物,要使其成为“Bark”,您必须将您的动物 CTYPE() 到狗才能访问“Bark”方法,和你的动物给一只猫访问“喵”的方法。否则你需要使用后期绑定。关键是,当您拥有动物时,您可以使用类似的方法,例如步行、坐等。要访问特定的方法,您需要特定的 Cat/Dog。
-
对,但我可以使用相同的变量(示例中的“Pet”),有条件地将其设置为 DOG 或 CAT 类,而无需后期绑定。如果我将 Pet 声明为 Animal,上面的代码会给出一个错误,即 Bark 不是 Animal 类的方法。
-
另外,我可以不用在 Animal 类中声明“Bark”一个空的、可覆盖的方法来做到这一点。我在“Cat\Dog”中使用的真实示例是非常复杂的派生类,具有许多独特的方法和属性。
标签: .net vb.net class inheritance