使用相关/派生Ts在泛型中进行投射

1 c# generics casting

class BaseItem { }

class DerivedItem : BaseItem { }

interface IInterface<T> where T is BaseItem { }

class RealizedInterface<T> : IInterface<T> { }

RealizedInterface<BaseItem> rb;
RealizedInterface<DerivedItem> rd = new RealizedInterface<DerivedItem>;
Run Code Online (Sandbox Code Playgroud)

有没有任何方法可以在下一行中显示:

rb = rd;   
Run Code Online (Sandbox Code Playgroud)

谁能告诉我怎么投rdrb

实际上BaseItem本身也是一个通用类,但为了简单的问题,没有写它. class BaseItem<U,K> / DerivedItem<U,K>

对于那些能够理解我面临的真正问题的人就是这个.

IShape<IBaseShape<long>, long> shape;
Run Code Online (Sandbox Code Playgroud)

这是一个声明的对象

IShape<ITriangle<long>, long> triangle =new Shape<ITriangle<long>,long>(); //Shape derived from IShape

shape = triangle; //here is the problem.
Run Code Online (Sandbox Code Playgroud)

ITriangle从IBaseShape获得的地方.我非常感谢任何帮助.

结果:我决定不实施关键字.它并没有给我带来太大的价值(这是一个持续数月的项目,到处都是仿制药).具体来说,如果您考虑在带有in关键字的接口和带有out关键字的getter中实现setter ,加上在使用out关键字修饰的界面中使用泛型创建的强制转换问题,我会考虑两次.总而言之,如果你从一开始就使用它们就会很有用,否则它会带来比你想象的更多的问题.

小智 5

您正在寻找的是通用类型的协方差和逆变.你可以在这里阅读这个主题