考虑一下,我有以下3个类/接口:
class MyClass<T> { } interface IMyInterface { } class Derived : IMyInterface { }
我希望能够投射一个MyClass< Derived>进入MyClass< 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>的接口.
所以我的问题是双重的:
>为什么我不能在这两种类型之间施放?
>有没有办法保持使用MyClass< Derived>实例的好处?同时仍然可以将其转换为MyClass< IMyInterface>?