-2

这是代码。

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

public class EHouse : EData {

}

我不希望函数 All in class EHousereturnEData但 return EHouse

EHouse.All()应该返回一种 EHouse 类型,而无需在派生类中编码任何额外内容。

4

2 回答 2

5

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

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

public class EHouse : EData<EHouse> 
{

}

使用如下:

EHouse all = EHouse.All();

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

于 2013-04-04T19:52:37.397 回答
1

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

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


public class EHouse : EData<EHouse> { }
于 2013-04-04T19:59:13.113 回答