我们说我有:
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类型的对象?我必须手动完成吗?
答案 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
,并为从中派生的每个类提供自定义实现。