2013-02-18 4 views
0

Скажем, у меня есть:Как получить объект типа BaseType из объекта типа, который наследуется от него?

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, когда я отладки кода и наведите объект с помощью мыши. Как я могу получить объект типа Vehicle с объекта типа Bicycle? Нужно ли мне это делать вручную?

+1

Зачем вам это нужно? По определению, «Велосипед» - это «автомобиль». –

+0

Мне это нужно, потому что я пытаюсь сериализовать объект, и моя служба WCF ожидает «Vehicle». Я читал об атрибуте «KnownType», но для меня это не сработало ... –

+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 

Однако это также выскакивает ошибка компилятора:

Conversion operators cannot convert from a type to its base type

Doing быстрый поиск на сайте MSDN вызывающую следующее объяснение:

At compile time, Visual Basic considers a predefined conversion to exist from any reference type to any type in its inheritance hierarchy, that is, any type from which it derives or which derives from it. Such a conversion might fail at run time, but the compiler cannot predict run-time results, so it allows any such conversion to compile.

Чтобы сократить длинную историю, я думаю, вам необходимо реализовать ISerializable на Vehicle и обеспечить индивидуальную реализацию для каждого класса, который вытекает из него.