这种模式本质上允许您在父类中引用具体的子类,例如:
public abstract class Turtle<T> where T : Turtle<T>
{
public abstract T Procreate();
}
public class SeaTurtle : Turtle<SeaTurtle>
{
public override SeaTurtle Procreate()
{
// ...
}
}
对比:
public abstract class Turtle
{
public abstract Turtle Procreate();
}
public class SnappingTurtle : Turtle
{
public override Turtle Procreate()
{
// ...
}
}
SeaTurtle
的孩子也将是一只SeaTurtle
。java.lang.Enum
使用该模式为子类实现java.lang.Comparable
。我相信C#也有类似的东西。 - Johannes Schaub - litb我看不到有任何用处。基本上,它和
是一样的。public class Turtle
{
}
Turtle
无法实例化。 - stragerTurtle
的子类并实例化它,但你不能实例化Turtle
本身的副本。 - RCIX