极简怪,但我相信存在一个解释...... 我有一个接口(IRepository),有6个方法可以由类实现。但是当我把代码用于实现接口时,VS2015并没有向我显示实现类的选项,如果我没有手动实现并编译项目它不会显示编译错误,不应该吗?它是否应该显示编译错误告诉我,我没有实现接口。
接口:
public interface IRepository<T> where T : class
{
IQueryable<T> GetAll ();
IQueryable<T> FindBy ( Expression<Func<T, bool>> predicate );
void Add ( T entity );
void Delete ( T entity );
void Edit ( T entity );
void Save ();
}
应该实现IRepository但不实现的类,它不会抛出编译错误:
public class GenericRepository<T> where T : class, IRepository<T>
{
}
答案 0 :(得分:5)
GenericRepository
没有实现IRepository
。但它接受Generic类型参数,该参数是实现IRepository
的类型。
要强制GenericRepository
实施IRepository
,您需要使用此功能:
public class GenericRepository<T> : IRepository<T> where T : class
{
// implement the interface here
}
然而,如果保留代码,则需要声明对象:
var repo = new GenericRepository<SomeClassThatImplementsIReporsitory>();