2013-02-18 5 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 유형의 객체를 얻으려면 어떻게해야합니까? 수동으로해야합니까?

+1

왜 필요합니까? 정의상 '자전거'는 * 차량입니다. –

+0

개체를 serialize하려고 할 때 WCF 서비스가 'Vehicle'을 기대하기 때문에 필요합니다. 'KnownType' 속성에 대해 읽었지만 저에게 도움이되지 않았습니다 ... –

+0

서비스가 계약서에'Vehicle'을 요청하고'Bicycle'을 전달하면 제대로 작동합니다. 뭔가 다른 가능성이 있습니다. 원래의 질문에 답하기 위해 수동으로 약간의 다리 작업을해야하기 때문에이 경우 증상보다는 주요 문제를 수정하는 것이 가장 좋습니다. –

답변

0

I이었다거야 당신에게 확실한 해결책 제공 : 그러나

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에서 빠른 검색을 수행

Conversion operators cannot convert from a type to its base type

을 다음과 같은 설명을 불러옵니다

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.

짧게 요약하면 01에 ISerializable을 구현해야한다고 생각합니다.에서 파생 된 각 클래스에 대한 사용자 지정 구현을 제공하십시오.

관련 문제