这是我正在使用的代码,它在实例化时出现构建错误。我不确定为什么它没有看到我的SpecialHandler是BaseHandler类型,T设置为SpecialEntity
static class HandlerFactory
{
public static BaseHandler<BaseEntity> Create(string typeString)
{
throw new NotImplementedException();
}
public static BaseHandler<T> Create<T>(string typeString ) where T : BaseEntity {
if (typeString == "Special")
**return new SpecialHandler();** //THERE'S BUILD ERROR HERE EVEN THOUGH Special Handler is inherits from type BaseHandler<T>
else
return null;
}
}
public class BaseHandler<T> where T : BaseEntity
{
public T GetEntity()
{
throw new NotImplementedException();
}
}
public class SpecialHandler : BaseHandler<SpecialEntity> {}
public class BaseEntity{}
public class SpecialEntity : BaseEntity{}
答案 0 :(得分:2)
(使用我的通灵调试技巧推断出问题)
除非另有规定(并且它仅适用于界面),遗传参数是不变的,即精确
定义为List<Mammal>
的集合与定义为List<Animal>
的集合或定义为List<Cat>
的集合无任何关联。
Create
方法表示它返回BaseHandler<BaseEntity>
而不是BaseHandler<SpecialEntity>
,而您的SpecialHandler
是_ BaseHandler<SpecialEntity>
,但它不是BaseHandler<BaseEntity>
。