Usando construtores (Guia de Programação em C#)

Quando classe ou estrutura são criados, o construtor é chamado. Os construtores têm o mesmo nome que a classe ou estrutura, e o inicializam geralmente os membros de dados do novo objeto.

No exemplo, uma classe denominada Taxi é definida usando um construtor simples. Essa classe é então instanciada com o operador de novo . O construtor de Taxi é chamado pelo operador de new imediatamente após a memória é atribuída para o novo objeto.

public class Taxi
{
    public bool isInitialized;
    public Taxi()
    {
        isInitialized = true;
    }
}

class TestTaxi
{
    static void Main()
    {
        Taxi t = new Taxi();
        Console.WriteLine(t.isInitialized);
    }
}

Um construtor sem parâmetros é chamado um construtor padrão. Os construtores padrão são chamadas sempre que um objeto é instanciado usando o operador de new e nenhum argumento é fornecido a new. Para obter mais informações, consulte Construtores de instâncias (Guia de Programação em C#).

A menos que a classe é static, as classes sem construtores são fornecidas um construtor público de opção de compilador C# para permitir a instanciação da classe. Para obter mais informações, consulte Classes static e membros de classes static (Guia de Programação em C#).

Você pode impedir uma classe é instanciada fazendo o construtor particular, da seguinte maneira:

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

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

Para obter mais informações, consulte Construtores particulares (Guia de Programação em C#).

Construtores para tipos de estrutura são semelhantes aos construtores de classe, mas structs não pode conter um construtor padrão explícito como um é fornecido automaticamente pelo compilador. Esse construtor inicializa cada campo em struct para valores padrão. Para obter mais informações, consulte Tabela de valores padrão (Referência de C#). No entanto, esse construtor padrão é chamado somente se struct é instanciado com new. Por exemplo, esse código usa o construtor padrão para Int32, para que você está assegurado que o inteiro é inicializado:

int i = new int();
Console.WriteLine(i);

O código a seguir, o entanto, causa um erro do compilador porque não usa new, e como tentar usar um objeto que não esteja inicializado:

int i;
Console.WriteLine(i);

Como alternativa, os objetos com base em structs (incluindo todos os tipos numéricos internas) podem ser inicializados ou atribuído e então usado como no exemplo a seguir:

int a = 44;  // Initialize the value type...
int b;
b = 33;      // Or assign it before using it.
Console.WriteLine("{0}, {1}", a, b);

Para chamar o construtor padrão para um tipo de valor não é necessário.

As classes e structs podem definir os construtores que têm parâmetros. Os construtores que têm parâmetros devem ser chamado com uma instrução de new ou uma declaração de base . As classes e structs também podem definir vários construtores, e não é necessário definir um construtor padrão. Por exemplo:

public class Employee
{
    public int salary;

    public Employee(int annualSalary)
    {
        salary = annualSalary;
    }

    public Employee(int weeklySalary, int numberOfWeeks)
    {
        salary = weeklySalary * numberOfWeeks;
    }
}

Essa classe pode ser criada usando qualquer uma das instruções a seguir:

Employee e1 = new Employee(30000);
Employee e2 = new Employee(500, 52);

Um construtor pode usar a palavra-chave de base para chamar o construtor da classe base. Por exemplo:

public class Manager : Employee
{
    public Manager(int annualSalary)
        : base(annualSalary)
    {
        //Add further instructions here.
    }
}

Nesse exemplo, o construtor para a classe base é chamado antes que o bloco para o construtor é executado. A palavra-chave de base pode ser usado com ou sem parâmetros. Todos os parâmetros para o construtor podem ser usados como parâmetros para base, ou como parte de uma expressão. Para obter mais informações, consulte base (Referência de C#).

Em um classe derivada, se um construtor de classe base não é chamado explicitamente usando a palavra-chave de base , o construtor padrão, se houver, um é chamado implicitamente. Isso significa que as seguintes declarações de construtor são efetivamente as mesmas:

public Manager(int initialdata)
{
    //Add further instructions here.
}
public Manager(int initialdata)
    : base()
{
    //Add further instructions here.
}

Se uma classe base não oferece um construtor padrão, a classe derivada deve fazer uma chamada explícita para um construtor de base usando base.

Um construtor pode chamar outro construtor no mesmo objeto usando a palavra-chave de isso . Como base, this pode ser usado com ou sem parâmetros, e todos os parâmetros no construtor estão disponíveis como parâmetros para this, ou como parte de uma expressão. Por exemplo, o segundo construtor no exemplo anterior pode ser reescrito usando this:

public Employee(int weeklySalary, int numberOfWeeks)
    : this(weeklySalary * numberOfWeeks)
{
}

O uso da palavra-chave de this no exemplo anterior faz com que esse construtor para ser chamado:

public Employee(int annualSalary)
{
    salary = annualSalary;
}

Construtores podem ser marcados como público, private, protegido, interno, ou protectedinternal. Esses modificadores de acesso definem como os usuários de classe podem construir a classe. Para obter mais informações, consulte Modificadores de acesso.

Um construtor pode ser declarada usando a palavra-chave static de static . Os construtores estáticos são chamados automaticamente, imediatamente antes de todos os campos estáticos são acessados, e geralmente usados para inicializar membros estáticos da classe. Para obter mais informações, consulte Construtores estáticos.

Especificação da linguagem C#

Para obter mais informações, consulte a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também

Referência

Classes e structs (Guia de Programação em C#)

Construtores (Guia de Programação em C#)

Destruidores (Guia de Programação em C#)

Conceitos

Guia de Programação em C#