考虑,我有以下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>
?