"没有实现接口成员"使用继承时出错

时间:2016-10-03 01:47:54

标签: c# .net generics

我有这两个接口:

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>。我错过了什么?

2 个答案:

答案 0 :(得分:4)

界面明确要求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) { } } 意味着您正在限制接口的实现。

要使其正常工作,您必须设计如下界面:

M1 = tf.Variable(tf.random_normal([2,3,4]))
M2 = tf.Variable(tf.random_normal([5,4]))  
N = tf.einsum('ijk,lk->ijl',M1,M2)       

答案 1 :(得分:0)

您的UserFilterHelper在过滤器方法中具有错误的参数类型:

    public class UserFilterHelper : IFilterHelper<ApplicationUser> {

public void Filter(ISearchModel<ApplicationUser> /* Not UserSearchModel */ model, ref IQueryable<ApplicationUser> dbModel)
{
}

}

您仍会传递“UserSearchModel”&#39;作为参数。只有方法签名才需要它是ISearchModel