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