这个类的声明:
public abstract class Repository<TE, TD>
where TE : class, IEntity, new()
where TD : DataProvider<TE>
此类签名无法实现:
public class SqlRepository<TE> : Repository<TE, SqlDataProvider>
where TE : SqlEntity, new()
在
SqlEntity : IEntity
和SqlDataProvider : DataProvider<SqlEntity>
处,出现此错误:为什么不能将SqlEntity转换为其实现的接口(interface)?
最佳答案
问题是,在SqlRepository<TE>
中,您正在将TD
的内部通用参数(该参数与TE
声明中的Repository<TE, TD>
链接在一起)固定为SqlEntity
,但这无法告知TE
,它是通用的。
您可以做的是像这样在TD
中保持SqlDataProvider
通用:
public class SqlDataProvider<TD> : DataProvider<TD>
where TD : SqlEntity
然后像这样在
SqlRepository
中显示此依赖关系:public class SqlRepository<TE> : Repository<TE, SqlDataProvider<TE>>
where TE : SqlEntity, new()
这样编译,因为
TE
用法是一致的。关于c# - 无法继承泛型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23434006/