如何从继承自它的类型的对象中获取BaseType类型的对象?

时间:2013-02-18 14:50:10

标签: vb.net inheritance

我们说我有:

Class Vehicle
    Public Property NumberOfWheels As Integer
End Class

Class Bicycle
    Inherits Vehicle

End Class

我做:

Dim b = New Bicycle() With {.NumberOfWheels = 2}
Dim v As Vehicle = CType(b, Vehicle)
当我调试代码并用鼠标悬停对象时,

v仍为Bicycle。 如何从Bicycle类型的对象中获取Vehicle类型的对象?我必须手动完成吗?

1 个答案:

答案 0 :(得分:0)

我会给你一个明显的解决方案:

Class Bicycle
    Inherits Vehicle

    Public Shared Widening Operator CType(value As Bicycle) As Vehicle
        Return New Vehicle With {.NumberOfWheels = value.NumberOfWheels}
    End Operator

End Class

但是,这也会弹出编译器错误:

  

转换运算符无法从类型转换为基类型

在MSDN上快速搜索会产生以下解释:

  

在编译时,Visual Basic会将预定义的转换视为   存在从任何引用类型到其继承中的任何类型   层次结构,即从中派生或派生的任何类型   从中。这样的转换可能在运行时失败,但编译器   无法预测运行时结果,因此它允许任何此类转换   编译。

简而言之,我认为您需要在ISerializable上实现Vehicle,并为从中派生的每个类提供自定义实现。