Поделиться через


Частные конструкторы (руководство по программированию на C#)

Приватный конструктор — это специальный конструктор экземпляра. Обычно он используется в классах, содержащих только статические элементы. Если класс имеет один или несколько частных конструкторов и нет открытых конструкторов, другие классы (кроме вложенных классов) не могут создавать экземпляры этого класса. Рассмотрим пример.

class NLog
{
    // Private Constructor:
    private NLog() { }

    public static double e = Math.E;  //2.71828...
}

Объявление пустого конструктора предотвращает автоматическое создание конструктора без параметров. Обратите внимание, что если с конструктором не используется модификатор доступа, он по-прежнему будет закрытым по умолчанию. Однако частный модификатор обычно используется явно, чтобы ясно, что класс не может быть создан.

Частные конструкторы используются для предотвращения создания экземпляров класса, если нет полей экземпляров или методов, таких как Math класс, или при вызове метода для получения экземпляра класса. Если все методы в классе являются статическими, рекомендуется сделать полный класс статическим. Дополнительные сведения см. в разделе "Статические классы" и "Члены статических классов".

Пример

Ниже приведен пример класса с помощью частного конструктора.

public class Counter
{
    private Counter() { }

    public static int currentCount;

    public static int IncrementCount()
    {
        return ++currentCount;
    }
}

class TestCounter
{
    static void Main()
    {
        // If you uncomment the following statement, it will generate
        // an error because the constructor is inaccessible:
        // Counter aCounter = new Counter();   // Error

        Counter.currentCount = 100;
        Counter.IncrementCount();
        Console.WriteLine($"New count: {Counter.currentCount}");

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
// Output: New count: 101

При раскомментировании следующей инструкции из примера возникнет ошибка, так как конструктор недоступен из-за его уровня доступа.

// Counter aCounter = new Counter();   // Error

См. также