Какая польза от частного конструктора в абстрактном классе в c#? - PullRequest
2 голосов
/ 26 февраля 2020

Я сталкиваюсь с вопросом ниже в интервью.

Q1.Можем ли мы иметь частного конструктора в абстрактном классе?

Ответ - Да, я дал ответ, который мы можем получить, затем он снова спросил, почему и какой смысл использовать частный конструктор. Я не могу ответить на этот перекрестный вопрос. Кто-нибудь может объяснить это? с практически в c# очень поможет.

1 Ответ

10 голосов
/ 26 февраля 2020

Я могу придумать два варианта использования:

Во-первых, для создания цепочки. У вас может быть несколько защищенных конструкторов, но вы хотите выполнить общий код во всех них:

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
    {
        ...
    }
}
...