我有以下代码片段:
interface IRepositoryBase<BackupType> where BackupType : IBackup {
IEnumerable<BackupType> Backups { get; set; }
void Delete(BackupType backup);
BackupType GetOrCreateBackup(IFileSource source);
}
interface IRepository : IRepositoryBase<IBackup> {
}
interface IRepository<BackupType> : IRepository, IRepositoryBase<BackupType> where BackupType : IBackup {
}
基本上我的请求是我希望能够用任何 IRepository<BackupType> 替换 IRepository,以防我想将一些 IRepository<BackupType> 放入一个集合中(这样我就可以为集合指定一个类型)。此外,假设 IRepository<BackupType> 从 IRepository 继承(而不是相反)似乎是合理和合乎逻辑的。此外,我绝对希望 IRepository 具有 IRepository<BackupType> 的所有属性和方法(唯一的区别是非泛型与泛型)
不幸的是,编译器在代码中给出了以下错误:
IRepository<BackupType> cannot implement both IRepositoryBase<IBackup> and IRepositoryBase<BackupType> because they may unify for some type parameter substitutions
因此,我再次尝试使用其他一些代码来消除此错误(IRepositoryBase<> 接口已消失):
interface IRepository {
IEnumerable<IBackup> Backups { get; set; }
void Delete(IBackup backup);
IBackup GetOrCreateBackup(IFileSource source);
}
interface IRepository<BackupType> : IRepository where BackupType : IBackup {
new IEnumerable<BackupType> Backups { get; set; }
void Delete(BackupType backup);
new BackupType GetOrCreateBackup(IFileSource source);
}
现在我有这些丑陋的“新”在那里。此外,在实现 IRepository<BackupType> 后,编译器似乎仍然希望实现两个“Backups”属性,尽管我用“new”隐藏了第一个属性。
有人可以告诉我如何正确地做到这一点吗?:)