2017-12-28 6 views
0

내가 슈퍼 참조 (upcasting)에 대한 하위 유형에 할당 할 수있는 경우 :조건부 연산자 할당

IWService wService; 
wService = new WService(); 
wService = new WServiceStub(); 

왜 그들은 조건 연산자 ? :에 할당 할 수 없습니다를?

IWService wService = isStub ? new WServiceStub() : new WService(); 

이 오류 얻을 :

Type of conditional expression cannot be determined because there is no implicit conversion between MyNamespace.WServiceStub and MyNamespace.WService

를하지만 컴파일 퍼 유형에 그들 중 하나를 캐스팅 충분 :

IWService wService = isStub ? (IWService)new WServiceStub() : new WService(); 

또는

IWService wService = isStub ? new WServiceStub() : (IWService)new WService(); 

I 돈 왜 내가 명백한 캐스트를 필요로하는지 이해하지 못한다. t InvalidCastException. 전환은 항상 확실한가요?

다음 코드가 정확히 동일하지 않습니까?

IWService wService; 
if (isStub) 
{ 
    wService = new WServiceStub(); 
} 
else 
{ 
    wService = new WService(); 
} 
+1

WService와 WServiceStub가 IDisposable과 IWService를 구현하는 경우 어떤 형식이 isStub? 새로운 WServiceStub() : 새 WService()'가 있습니까? – Heinzi

답변

-1

그것은 제 피연산자의 타입이 제의 종류 convertable되어야하기 때문에 식의 결과 유형을 결정할 때,이 과제의 좌측에 보이지 않는 것이다.

+0

그것은 완전히 정확하지 않습니다. 두 번째는 세 번째 유형으로 변환 될 수도 있습니다. https://stackoverflow.com/a/18260915/860585를 참조하십시오. – Rotem