Iスーパータイプの参照(アップキャスト)に任意のサブタイプを割り当てることができる場合:条件演算子の割り当て
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ドン私が決してgeをしないと明白なキャストが必要な理由を理解していないt InvalidCastException
。変換はいつも確実ですね。
次のコードはまったく同じではありませんか?
IWService wService;
if (isStub)
{
wService = new WServiceStub();
}
else
{
wService = new WService();
}
WServiceとWServiceStubの両方にIDisposableとIWServiceが実装されている場合、どの型が式 'isStub?新しいWServiceStub():新しいWService() 'がありますか? – Heinzi