给出这个例子:
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。
答案 0 :(得分:2)
TypeOf()是最好的方式 - 我认为你想要采取的行动将是这样的:
如果(MyObject是沃尔沃)那么 做一点事(); 否则,如果(MyObject是宝马)那么 做一点事(); 结束如果
如果您要执行的方法已经在宝马或沃尔沃,那么您不需要进行任何类型检查,因为您知道自己将在合适的班级。如果基于汽车类型执行和执行操作的方法在Car基类中,那么您将需要进行上述类型检查,但您只需要在基类中执行,而不是在每个派生类中执行类。
答案 1 :(得分:1)
这是真正希望避免的。您可以通过向基类添加虚方法来实现此目的。在this article.
中详细讨论答案 2 :(得分:1)
实际上只提到了两个选项,要么修改基类以使用虚拟DoSomething方法并在子类中覆盖它(您可以在基类中使用默认功能,不必是抽象的),或者你写了一个很大的条件陈述(我真的不建议这样做,违背OOP)