没有实现的接口没有编译错误

时间:2016-07-23 11:28:27

标签: c# interface visual-studio-2015

极简怪,但我相信存在一个解释...... 我有一个接口(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>
{
}

1 个答案:

答案 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>();