如何在基类中的函数中返回派生类类型
本文关键字:返回 派生 类型 函数 基类 | 更新日期: 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> { }