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

时间:2013-04-04 19:43:16

标签: c# .net

这是代码。

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

public class EHouse : EData {

}

我不希望类EHouse中的函数All返回EData,但返回EHouse

EHouse.All()应返回一种类型的EHouse,而不在派生类中编写任何额外的内容。

2 个答案:

答案 0 :(得分:5)

好吧,您可以使用Self Referencing Generics,但有时可以cause issues。但你得到这样的东西:

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

public class EHouse : EData<EHouse> 
{

}

使用方式如下:

EHouse all = EHouse.All();

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

答案 1 :(得分:1)

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

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


public class EHouse : EData<EHouse> { }