Я не могу понять использование этого кода. Какая польза от этого шаблона?
[код повторяется здесь для потомков]
public class Turtle<T> where T : Turtle<T>
{
}
Ответ 1
Этот шаблон по существу позволяет вам ссылаться на конкретный подкласс в родительском классе.
Например:
public abstract class Turtle<T> where T : Turtle<T>
{
public abstract T Procreate();
}
public class SeaTurtle : Turtle<SeaTurtle>
{
public override SeaTurtle Procreate()
{
// ...
}
}
Versus:
public abstract class Turtle
{
public abstract Turtle Procreate();
}
public class SnappingTurtle : Turtle
{
public override Turtle Procreate()
{
// ...
}
}
В первом указано, что ребенок SeaTurtle будет SeaTurtle.