这个类的声明:

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 : IEntitySqlDataProvider : 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/

10-12 01:30