0

假设我有:

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 类型的对象?我必须手动完成吗?

4

1 回答 1

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 认为存在从任何引用类型到其继承层次结构中的任何类型的预定义转换,即从其派生或派生自它的任何类型。这样的转换可能在运行时失败,但编译器无法预测运行时结果,因此它允许编译任何这样的转换。

长话短说,我认为您需要实现ISerializableVehicle为从它派生的每个类提供自定义实现。

于 2013-02-18T15:10:59.453 回答