如何在基类中的函数中返回派生类类型

本文关键字:返回 派生 类型 函数 基类 | 更新日期: 2023-09-27 18:07:22

代码如下:

public class EData {
    public static EData All(){
        return null;
    }
}
public class EHouse : EData {
}

我不希望函数所有在类EHouse返回EData但返回EHouse

EHouse.All()应该返回一个类型的EHouse,而不需要在派生类中编写任何额外的代码。

如何在基类中的函数中返回派生类类型

好吧,你可以使用自引用泛型,但有时会导致问题。但是你会得到这样的结果:

public class EData<T> where T : EData<T>
{
    public static T All(){
        return null;
    }
}
public class EHouse : EData<EHouse> 
{
}

使用如下:

EHouse all = EHouse.All();

但不确定这是否违反了"不必在派生类中编写任何代码"的约束,因为它稍微改变了继承声明。

您可以尝试具有泛型类型参数的EData:

public class EData<T> 
{
    public static T All()
    { return (T) ..... }
}

public class EHouse : EData<EHouse> { }