Вы можете использовать обобщения, чтобы указать, что тип должен соответствовать производному типу, как этот.
public abstract class LineContainer<T> where T : LineContainer<T>
{
public abstract IEnumerable<Line3d> Get3dLines();
public abstract bool CanBeGroupedWith(T container);
}
public class DimensionContainer : LineContainer<DimensionContainer>
{
public override IEnumerable<Line3d> Get3dLines()
{
}
public override bool CanBeGroupedWith(DimensionContainer container)
{
}
}
Также обратите внимание, что это не ограничивает универсальный тип производным классом, к которому он также применяется. Это просто, как вы можете контролировать тип и, по крайней мере, ограничить его типом, который наследуется от LineContainer<T>
.