这是我的第一个问题,对不起,
我试图声明一个从同一类的继承创建的对象,但它告诉我无法强制继承该对象
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>
这样T
的CowEntity
。
现在,如果您能够将其分配给BaseController<BaseEntity>
您,您将可以突然进行呼叫Add(BaseEntity entity)
(因为T现在是了BaseEntity
,现在CowEntity
不再可用)。
这意味着您可以向的基础控制器(实际上是的实例)添加的实例ChickenEntity
(与无关CowEntity
,它只是的另一个派生类BaseEntity
)BaseController<CowEntity>
。现在突然有一个实例BaseController<CowEntity>
包含ChickenEntity
。您会发现这没有任何意义。
为了解决这个问题,您需要阅读有关接口和协方差(和逆方差)的信息。
希望这可以帮助 :)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句