Я могу придумать два варианта использования:
Во-первых, для создания цепочки. У вас может быть несколько защищенных конструкторов, но вы хотите выполнить общий код во всех них:
public abstract class Foo
{
protected Foo(string name) : this(name, 0)
{
}
protected Foo(int value) : this("", value)
{
}
private Foo(string name, int value)
{
// Do common things with name and value, maybe format them, etc
}
}
Вторым вариантом будет создание так, чтобы единственными возможными производными классами были вложенные классы, которые имеют доступ к закрытым членам. Я использовал это раньше, когда хочу применить ограниченное количество производных классов, экземпляры которых обычно предоставляются через базовый класс
public abstract class Operation
{
public static readonly Operation Add { get; } = new AddOperation();
public static readonly Operation Subtract { get; } = new SubtractOperation();
// Only nested classes can use this...
private Operation()
{
}
private class AddOperation : Operation
{
...
}
private class SubtractOperation : Operation
{
...
}
}