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
。 它需要实现GetFilter
, GetFilter
等; 简而言之, GetFilter
。 所以你可以看到它不是一个限制。