C#抽象通用方法

C#,。net 3.5

我正在尝试创建一个具有generics方法的基类。 从中inheritance的类应指定方法的类型。

这样做的前提是创建管理过滤的类。

所以我有:

public abstract class FilterBase { //NEED Help Declaring the Generic method for GetFilter //public abstract IQueryable GetFilter(IQueryable query); } public class ProjectFilter:FilterBase { public IQueryable GetFilter(IQueryable query) { //do stuff with query return query; } } public class ProjectList { public static ProjectList GetList(ProjectFilter filter) { var query = //....Linq code... query = filterCriteria.GetFilter(query); } } 

认为它很简单,但我无法在FilterBase中获得GetFilter抽象方法的语法。

编辑

理想情况下,只想将方法保持为通用方法而不是类。 如果不可能,请告诉我..

使FilterBase类本身是通用的。

 public abstract class FilterBase { public abstract IQueryable GetFilter(IQueryable query); } 

这将使您能够像这样创建ProjectFilter类:

 public class ProjectFilter : FilterBase { public override IQueryable GetFilter(IQueryable query) { //do stuff with query return query; } } 
  public abstract class FilterBase { public abstract IQueryable GetFilter(IQueryable query); } 

当然,您可以使用抽象的通用方法:

 public abstract class FilterBase { public abstract IQueryable GetFilter(IQueryable query); } 

问题是它并不意味着你想要什么。 任何T都可以调用它。 特别是,以下必须工作,因为ProjectFilter派生自FilterBase

 FilterBase fb = new ProjectFilter(...); IQueryable query = ...; IQueryable filter = fb.GetFilter(query); 

所以FilterBase不能只实现GetFilter 。 它需要实现GetFilterGetFilter等; 简而言之, GetFilter 。 所以你可以看到它不是一个限制。