Это прекрасно работает:
public class Parent<T> where T : Parent<T>
{
public T Prop { get; set; }
}
public class Child : Parent<Child>
{
}
Будьте осторожны с этим, поскольку c# не обеспечивает истинные отношения Parent
/ Child
. Например, учитывая приведенный выше код, для меня также будет законным сделать следующее:
public class Stranger : Parent<Child>
{
}
Если вы пишете модульные тесты, то стоит написать средство проверки типов, которое ищет эту ошибку.