未实现接口成员使用继承时出错
本文关键字:继承 出错 实现 接口 成员 | 更新日期: 2023-09-27 18:09:52
我有这两个接口:
public interface IFilterHelper<T>
{
void Filter(ISearchModel<T> model, ref IQueryable<T> dbModel);
}
public interface ISearchModel<T>
{
IQueryable<T> GetDBModel(DbContext db);
}
这两种实现
public class UserSearchModel : ISearchModel<ApplicationUser>
{
public IQueryable<ApplicationUser> GetDBModel(DbContext db)
{
return db.Users.Where(u => true); //something like this
}
}
public class UserFilterHelper : IFilterHelper<ApplicationUser>
{
public void Filter(UserSearchModel model, ref IQueryable<ApplicationUser> dbModel)
{
}
}
但是我得到错误'UserFilterHelper' does not implement interface member 'IFilterHelper<ApplicationUser>.Filter(ISearchModel<ApplicationUser>, ref IQueryable<ApplicationUser>)'
但是当我把UserSearchModel
换成ISearchModel<ApplicationUser>
时,它编译成功了。我知道我可以强制转换它,让它工作,但为什么它会给我那个错误。可以看到,UserSearchModel
类实现了接口ISearchModel<ApplicationUser>
。我错过了什么?
接口明确要求ISearchModel<ApplicationUser>
,即使UserSearchModel
实现了ISearchModel<ApplicationUser>
,它也不是唯一可以实现的。我可以创建一个类SuperUserSearchModel
,它也将实现相同的接口。
所以试图写public void Filter(UserSearchModel model, ref IQueryable<ApplicationUser> dbModel)
意味着你限制了接口的实现。
要使它工作,你必须这样设计你的界面:
public interface IFilterHelper<T, R> where R : ISearchModel<T>
{
void Filter(R model, ref IQueryable<T> dbModel);
}
public class UserFilterHelper : IFilterHelper<ApplicationUser, UserSearchModel>
{
public void Filter(UserSearchModel model, ref IQueryable<ApplicationUser> dbModel)
{
}
}
您的UserFilterHelper在过滤器方法中有错误的参数类型:
public class UserFilterHelper : IFilterHelper<ApplicationUser> {
public void Filter(ISearchModel<ApplicationUser> /* Not UserSearchModel */ model, ref IQueryable<ApplicationUser> dbModel)
{
}
}
你仍然会传入'UserSearchModel'作为参数。只有方法签名要求它是ISearchModel