一個非常簡單的基類:
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為虛擬或抽象可能會派上用場
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/398756.html
