基类中的泛型是否可以在父类中指定

本文关键字:父类 泛型 是否 基类 | 更新日期: 2023-09-27 18:33:36

我有一个基类,它有在 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 类中说该类唯一有效的泛型类型是 student,以便我的使用代码看起来像......

List<student> students = new limxpoDB.Home.student().fetchAll(db, false);

我意识到这里的差异很小,但我也在一些 VB>Net 代码中使用此库,它看起来很糟糕......

有什么想法吗?

谢谢

基类中的泛型是否可以在父类中指定

子类不能对方法施加泛型类型参数。 所以如果我有:

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>
}