내가 슈퍼 참조 (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();
}
WService와 WServiceStub가 IDisposable과 IWService를 구현하는 경우 어떤 형식이 isStub? 새로운 WServiceStub() : 새 WService()'가 있습니까? – Heinzi