如何获取对象的子类?

时间:2010-02-23 12:23:27

标签: .net vb.net subclass

给出这个例子:

Public Class Car
End Class

Public Class Vovlo
    Inherits Car
End Class

Public Class BMW
    Inherits Car
End Class

当我收到Car对象时,如何确定Car对象是沃尔沃,宝马还是汽车?

我知道我可以使用TypeOf,但是当有几个类继承自Car类时,这会变得有些麻烦。

编辑:

这就是我想要实现的目标:

   Public Sub DoSomething()
        Dim subClassCar As Car.SubClass = DirectCast(car, Car.SubClass)
   End Sub

如果汽车对象有子类,Car.CubClass可以是Volvo或BMW,如果没有子类,则可以是汽车。问题是如何获得Car.SubClass。

3 个答案:

答案 0 :(得分:2)

TypeOf()是最好的方式 - 我认为你想要采取的行动将是这样的:

如果(MyObject是沃尔沃)那么     做一点事(); 否则,如果(MyObject是宝马)那么     做一点事(); 结束如果

如果您要执行的方法已经在宝马或沃尔沃,那么您不需要进行任何类型检查,因为您知道自己将在合适的班级。如果基于汽车类型执行和执行操作的方法在Car基类中,那么您将需要进行上述类型检查,但您只需要在基类中执行,而不是在每个派生类中执行类。

答案 1 :(得分:1)

这是真正希望避免的。您可以通过向基类添加虚方法来实现此目的。在this article.

中详细讨论

答案 2 :(得分:1)

实际上只提到了两个选项,要么修改基类以使用虚拟DoSomething方法并在子类中覆盖它(您可以在基类中使用默认功能,不必是抽象的),或者你写了一个很大的条件陈述(我真的不建议这样做,违背OOP)