考えてみてください。私には次の3つのクラス/インターフェースがあります。
class MyClass<T> { }
interface IMyInterface { }
class Derived : IMyInterface { }
MyClass<Derived>
そして、私はaMyClass<IMyInterface>
またはその逆にキャストできるようにしたいと思います:
MyClass<Derived> a = new MyClass<Derived>();
MyClass<IMyInterface> b = (MyClass<IMyInterface>)a;
しかし、試してみるとコンパイラエラーが発生します。
Cannot convert type 'MyClass<Derived>' to 'MyClass<IMyInterface>'
私がこれを行うことができない非常に正当な理由があると確信していますが、私はそれを考えることができません。
私がこれをやりたい理由について-私が想像しているシナリオは、MyClass<Derived>
多くの厄介なキャストを回避するためにインスタンスを操作するのが理想的ですが、インスタンスを受け入れるインターフェイスにインスタンスを渡す必要がありますMyClass<IMyInterface>
。
だから私の質問は2つあります:
- これら2つのタイプの間でキャストできないのはなぜですか?
MyClass<Derived>
これをにキャストできる一方で、インスタンスを操作することの素晴らしさを維持する方法はありますMyClass<IMyInterface>
か?