拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 回传与呼叫基方法的子类相同的型别

回传与呼叫基方法的子类相同的型别

白鹭 - 2022-02-13 1980 0 0

一个非常简单的基类:

class Figure {
    public List<?> getList() {
        var list = new List<same as child>();
        //do some code
        //filling list
        return list;
    }
}

这个继承类:

class Rectangle : Figure
{
    
}
class Cube : Figure
{
    
}

我知道我可以像这样使用泛型:

class Figure {
    public List<T> getList<T>() {
        var list = new List<T>();
        //do some code
        //filling list
        return list;
    }
}

Rectangle rec = new Rectangle();
List<Rectangle> lRec = rec.getList<Rectangle>();

Cube cube = new Cube();
List<Cube> lCube = cube.getList<Cube>();

但我想知道是否有替代方案

像这样:

Rectangle rec = new Rectangle();
List<Rectangle> lRec = rec.getList();

Cube cube = new Cube();
List<Cube> lCube = cube.getList();

uj5u.com热心网友回复:

如果您将型别自变量限制为实作类,您将得到您想要的:

class Figure<T> where T : Figure<T>
{
    public List<T> getList()
    {
        var list = new List<T> ();
        //do some code
        //filling list
        return list;
    }
}

class Rectangle : Figure<Rectangle>
{

}
class Cube : Figure<Cube>
{

}

根据场景标记getList为虚拟或抽象可能会派上用场

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *