我有一个基类,它有在C#中使用泛型类型的方法,然后我有其他继承这些类的类,我想在父类中指定类型以避免在任何地方使用尖括号......
这是我的基类类CBaseHome
中的示例方法public List<T> fetchAll<T>(CBaseDb db, bool includeEmpty = true) where T : CBaseTable, new()
{
List<T> retVal = new List<T>();
...
return retVal;
}
我有一个继承自这个类的父类(不覆盖这个函数)
在那个消耗它的类中,我有以下代码......
List<student> students = new limxpoDB.Home.student().fetchAll<student>(db, false);
所以这里的Home.student类继承了CBaseHome类,学生继承了CBaseTable ......
我希望能够在Home.student类中说,该类唯一有效的泛型类型是学生,以便我的消费代码看起来像......
List<student> students = new limxpoDB.Home.student().fetchAll(db, false);
我在这里意识到差异很小,但我也在一些VB&gt;网络代码中使用这个库,它看起来很糟糕......
有什么想法吗?
由于
答案 0 :(得分:4)
子类不能强加方法上的泛型类型参数。如果我有:
public class Parent {
public List<T> GetStuff<T>() { ... }
}
我做不到:
public class Child : Parent {
// This is not legal, and there is no legal equivalent.
public List<ChildStuff> GetStuff<ChildStuff>() { ... }
}
你可以做的是让父类是通用的,而不是它的方法:
public class Parent<T> {
public List<T> GetStuff() { ... }
}
public class Child : Parent<ChildStuff> {
// GetStuff for Child now automatically returns List<ChildStuff>
}