.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; } }
}