[英]C# Abstract Generic Method
C#,。net 3.5
我正在嘗試創建一個具有泛型方法的基類。 從中繼承的類應指定方法的類型。
這樣做的前提是創建管理過濾的類。
所以我有:
public abstract class FilterBase {
//NEED Help Declaring the Generic method for GetFilter
//public abstract IQueryable<T> GetFilter<T>(IQueryable<T> query);
}
public class ProjectFilter:FilterBase {
public IQueryable<Linq.Project> GetFilter(IQueryable<Linq.Project> 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<T>
{
public abstract IQueryable<T> GetFilter(IQueryable<T> query);
}
這將使您能夠像這樣創建ProjectFilter類:
public class ProjectFilter : FilterBase<Linq.Project>
{
public override IQueryable<Linq.Project> GetFilter(IQueryable<Linq.Project> query)
{
//do stuff with query
return query;
}
}
public abstract class FilterBase<T> {
public abstract IQueryable<T> GetFilter<T>(IQueryable<T> query);
}
當然,您可以使用抽象的通用方法:
public abstract class FilterBase {
public abstract IQueryable<T> GetFilter<T>(IQueryable<T> query);
}
問題是它並不意味着你想要什么。 任何T
都可以調用它。 特別是,以下必須起作用,因為ProjectFilter
派生自FilterBase
:
FilterBase fb = new ProjectFilter(...);
IQueryable<string> query = ...;
IQueryable<string> filter = fb.GetFilter<string>(query);
所以FilterBase
不能只實現GetFilter<Linq.Project>
。 它需要實現GetFilter<string>
, GetFilter<int>
等; 簡而言之, GetFilter<T>
。 所以你可以看到它不是一個限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.