我有这样的课程
CountryRepository
public class CountryRepository : BaseRepository<Country>
其中
BaseRepository
是
public abstract class BaseRepository<DT> : IRepository<DT>
where DT : IDomainEntity
和
IRepository
作为
public interface IRepository<DT>
where DT : IDomainEntity
我想将类存储在列表中
this.Repositories = new List<BaseRepository<IDomainEntity>>();
var o = new CountryRepository();
this.Repositories.Add(o);
错误4参数1:无法从“CountryRepository”转换为 'BaseRepository'
它不起作用,我哪里出错了。
答案 0 :(得分:3)
我哪里出错
CountryRepository
派生自BaseRepository<Country>
,与BaseRepository<IDomainEntity>
期望的List
类型的作业不兼容。
以下是如何解决的问题:
选项1:将非泛型抽象类作为类层次结构的根,并从中派生泛型类。
public abstract class BaseRepository
public abstract class BaseRepository<DT>: BaseRepository, IRepository<DT>
where DT: IDomainEntity
public class CountryRepository: BaseRepository<Country>
this.Repositories = new List<BaseRepository>();
var o = new CountryRepository();
this.Repositories.Add(o);
选项2:接口协方差。如果DT
仅用作IRepository
声明中的输出参数类型,方法返回类型或只读属性类型,则它将起作用。
public interface IRepository<out DT> where DT: IDomainEntity
public abstract class BaseRepository<DT> : IRepository<DT>
where DT : IDomainEntity
public class CountryRepository : BaseRepository<Country>
// Note the usage of IRepository<IDomainEntity>, not BaseRepository
this.Repositories = new List<IRepository<IDomainEntity>>();
var o = new CountryRepository();
this.Repositories.Add(o);
答案 1 :(得分:1)
之间存在差异
BaseRepository<Country>
和BaseRepository。
您的CountryRepository派生自
BaseRepository<Country>
而不是来自BaseRepository,因此您会收到错误。
分配继承权:
public class CountryRepository : BaseRepository