未实现接口成员使用继承时出错

本文关键字:继承 出错 实现 接口 成员 | 更新日期: 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