C#继承模板和等级

里卡多·里

这是我的第一个问题,对不起,

我试图声明一个从同一类的继承创建的对象,但它告诉我无法强制继承该对象

abstract class BaseEntity{...}

abstract class BaseController<T> where T : Model.BaseEntity{...}

class DummyEntity : BaseEntity {...}

class DummyController : BaseController<DummyEntity> {...}

当我想创建一个对象时,它表明它不能隐式转换。

BaseController<BaseEntity> a = new DummyController();
乔留斯

你不能这样做。这与协方差有关

想象BaseController<T>有一个方法Add(T entity)

现在,您创建的实例DummyController您可以致电Add(CowEntity entity)在这种情况下,因为DummyController继承BaseController<CowEntity>这样TCowEntity

现在,如果您能够将其分配给BaseController<BaseEntity>您将可以突然进行呼叫Add(BaseEntity entity)(因为T现在是了BaseEntity现在CowEntity不再可用)。
这意味着您可以向的基础控制器(实际上是的实例)添加的实例ChickenEntity(与无关CowEntity,它只是的另一个派生类BaseEntityBaseController<CowEntity>现在突然有一个实例BaseController<CowEntity>包含ChickenEntity您会发现这没有任何意义。

为了解决这个问题,您需要阅读有关接口协方差(和逆方差)的信息

希望这可以帮助 :)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章