2016-07-23 75 views
-1

在最小的奇怪,但我相信存在一个解释... 我有一个接口(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

经过一番在谷歌搜索我发现的问题:它应该这样写:** public class GenericRepository :IRepository 其中TEntity:class' ** – c2s

+0

就像下面写的答案? 'TEntity'或'T',没关系。 – user3185569

回答

5

GenericRepository没有实现IRepository。但它接受一个通用类型参数,该参数是实现IRepository的类型。

要强制GenericRepository实现IRepository你需要使用这样的:

public class GenericRepository<T> : IRepository<T> where T : class 
{ 
    // implement the interface here 
} 

而如果你离开的代码,因为它是,你需要声明你反对这样的:

var repo = new GenericRepository<SomeClassThatImplementsIReporsitory>();