C#, .net 3.5C# Abstract Metodo generico
Sto provando a creare una classe base che ha un metodo generico. Le classi che ne ereditano dovrebbero specificare il/i tipo/i del metodo.
La premessa per questo è per la creazione di classi che gestiscono il filtraggio.
Così ho:
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);
}
}
pensano che sia qualcosa di semplice, ma non riesco a ottenere la giusta sintassi nel FilterBase per il metodo astratto GetFilter.
EDIT
Idealmente, vorrebbe mantenere solo il metodo come generico e non la classe. Se non è possibile, per favore fatemelo sapere ..
che funziona, devo però fare la classe generica? Non posso semplicemente mantenere il metodo generico? Motivo che chiedo è che ci possono essere più GetFilter per la stessa classe che prendono un IQueryable diverso rispetto a 'Linq.Project' –
@B Z: È possibile rendere solo il metodo generico, ma dovrà rimanere generico fino a quando non viene richiamato. Non puoi derivare dalla classe non generica e assegnare il tipo generico al metodo mentre provi nella tua domanda. In questo caso, il chiamante dovrebbe fornire il tipo al metodo. –
@Mark - thx. Mi sembra una limitazione? Sai se ci sono ulteriori spiegazioni là fuori? Forse nel C# In Depth di Jon Skeet? –