Construtores particulares (Guia de Programação em C#)Private Constructors (C# Programming Guide)

Um construtor particular é um construtor de instância especial.A private constructor is a special instance constructor. Normalmente, ele é usado em classes que contêm apenas membros estáticos.It is generally used in classes that contain static members only. Se uma classe tiver um ou mais construtores particulares e nenhum construtor público, outras classes (exceto as classes aninhadas) não poderão criar instâncias dessa classe.If a class has one or more private constructors and no public constructors, other classes (except nested classes) cannot create instances of this class. Por exemplo:For example:

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

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

A declaração do construtor vazio impede a geração automática de um construtor sem parâmetro.The declaration of the empty constructor prevents the automatic generation of a parameterless constructor. Observe que, se você não usar um modificador de acesso com o construtor, ele ainda será privado por padrão.Note that if you do not use an access modifier with the constructor it will still be private by default. No entanto, o modificador private geralmente é usado explicitamente para deixar claro que a classe não pode ser instanciada.However, the private modifier is usually used explicitly to make it clear that the class cannot be instantiated.

Construtores particulares são usados para impedir a criação de instâncias de uma classe quando não há métodos ou campos de instância, como a classe Math ou quando um método é chamado para obter uma instância de uma classe.Private constructors are used to prevent creating instances of a class when there are no instance fields or methods, such as the Math class, or when a method is called to obtain an instance of a class. Se todos os métodos na classe forem estáticos, considere deixar toda a classe estática.If all the methods in the class are static, consider making the complete class static. Para obter mais informações, consulte Classes Estáticas e Membros de Classes Estáticas.For more information see Static Classes and Static Class Members.

ExemploExample

A seguir, temos um exemplo de uma classe usando um construtor particular.The following is an example of a class using a private constructor.

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: {0}", Counter.currentCount);

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

Observe que se você remover a marca de comentário da seguinte instrução do exemplo, ela gerará um erro porque o construtor está inacessível devido a seu nível de proteção:Notice that if you uncomment the following statement from the example, it will generate an error because the constructor is inaccessible because of its protection level:

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

Especificação da Linguagem C#C# Language Specification

Para obter mais informações, veja Construtores privados na Especificação da Linguagem C#.For more information, see Private constructors in the C# Language Specification. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.The language specification is the definitive source for C# syntax and usage.

Consulte tambémSee also