.net 为什么可以';t`Table`成员实现底层接口`ITable`成员?

.net 为什么可以';t`Table`成员实现底层接口`ITable`成员?,.net,linq-to-sql,inheritance,mocking,repository,.net,Linq To Sql,Inheritance,Mocking,Repository,我正在试验以下可模拟存储库模式: public interface IEmployeeRepository { ITable<Employee> Employees { get; } } 因此,我收到以下错误消息: “MyDataContext”未实现接口成员 “我的雇员地址,雇员”MyDataContext.Employees的 实现“IEEmployeeRepository.Employees”,因为它没有 匹配“System.Data.Linq.ITable”的返回类

我正在试验以下可模拟存储库模式:

public interface IEmployeeRepository
{
    ITable<Employee> Employees { get; }
}
因此,我收到以下错误消息:

“MyDataContext”未实现接口成员 “我的雇员地址,雇员”MyDataContext.Employees的 实现“IEEmployeeRepository.Employees”,因为它没有 匹配“System.Data.Linq.ITable”的返回类型


但是
Table
继承了
ITable
,所以它不应该是实现接口的合适返回类型吗?

实现类的类型必须与接口类型完全匹配。如果无法更改接口,则可以显式实现它:

class EmployeeRepository : IEmployeeRepository
{
    // existing property
    public Table<Employee> Employees { get; }

    // explicit IEmployeeRepository property
    ITable<Employee> IEmployeeRepository.Employees { get { return Employees; } }
}
class EmployeeRepository:IEEmployeeRepository
{
//现有财产
公共表雇员{get;}
//显式IEEmployeeRepository属性
ITable IEEmployeeRepository.Employees{get{return Employees;}}
}

+1我没有想到这一点。我确实尝试公开一个重命名的属性
EmployeesRepository
,该属性的作用基本相同,并返回基础属性,但在这里您可以保持名称不变,这是我更喜欢的。的可能重复项
class EmployeeRepository : IEmployeeRepository
{
    // existing property
    public Table<Employee> Employees { get; }

    // explicit IEmployeeRepository property
    ITable<Employee> IEmployeeRepository.Employees { get { return Employees; } }
}