Dav*_*rez 2 c# generics interface
我正在尝试根据标志返回两个存储库实例之一.我的存储库接口和实现如下所示:
public interface IRepository<T>
{
T Insert(T entity);
void Delete(T entity);
IEnumerable<T> SearchFor(Expression<Func<T, bool>> predicate);
IEnumerable<T> GetAll();
T SearchForFirst(Expression<Func<T, bool>> predicate);
bool Has(Expression<Func<T, bool>> predicate);
}
class Repository<T> : IRepository<T> where T : class { ... implementation here ...}
Run Code Online (Sandbox Code Playgroud)
并且返回存储库的两个实例之一的方法应该类似于:
public IRepository<T> GenerateRepository(bool flag)
{
if ( flag ) {
return new Repository<MyFirstType>();
} else {
return new Repository<MySecondType>();
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以指出我应该如何实际写出正确的方向吗?
谢谢
只有当两种类型共享一个公共基本类型或接口时才能工作,并且只有接口是协变的(你不是这样):
public IRepository<CommonAncestor> GenerateRepository(bool flag)
{
if (flag) {
return new Repository<MyFirstType>();
} else {
return new Repository<MySecondType>();
}
}
Run Code Online (Sandbox Code Playgroud)
返回IRepository一个未指定类型是没有意义的; 通用成员将无法使用.