Compartilhar via


Using Constructors (C# Programming Guide)

Construtores são Classe métodos que são executados quando um objeto de um determinado tipo é criado. Os construtores devem ter o mesmo nome que a classe, e geralmente inicializar os membros de dados do novo objeto.

No exemplo a seguir, uma classe nomeada Taxi é definida usando um construtor simples. Esta classe então é instanciado com o Novo operador. O Taxi construtor é invocado pela new operador imediatamente após a memória é alocada 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);
    }
}

É chamado um construtor sem parâmetros que leva um construtor padrão. Construtores padrão são invocados sempre que um objeto é instanciado, usando o new operador e sem argumentos são fornecidos para new. Para obter mais informações, consulte Instance Constructors (C# Programming Guide).

Classes sem construtores a menos que seja Estático, a classe recebem um construtor público padrão pelo compilador C# para habilitar instanciação de classe. Para obter mais informações, consulte Static Classes and Static Class Members (C# Programming Guide).

Você pode impedir que uma classe de sendo instanciado, tornando 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 de particular (guia de programação C#).

Construtores para struct tipos semelhantes de construtores de classe, mas structs não pode conter um construtor padrão explícita, pois um é fornecido automaticamente pelo compilador. Este construtor inicializa a cada campo de struct para os valores padrão. Para obter mais informações, consulte Padrão Tabela de valores (C# referência). No entanto, este construtor padrão é ocasionada somente se o struct é instanciado com new. Por exemplo, esse código usa o construtor padrão para Int32, de modo que você terá certeza que o número inteiro é inicializado:

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

O código a seguir, no entanto, causa um erro de compilador porque ele não usa new, e porque ele tenta usar um objeto que não foi inicializado:

int i;
Console.WriteLine(i);

Como alternativa, os objetos com base na structs (incluindo todos os tipos de numéricos internos) pode ser inicializado ou atribuído e, em seguida, 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);

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

Ambas as classes e structs podem definir construtores que levam parâmetros. Construtores que usam parâmetros devem ser chamados por meio de um new instrução ou um base instrução. Classes e structs também pode definir vários construtores, e nenhuma é necessária para 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 uma das instruções a seguir:

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

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

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

Neste exemplo, o construtor para a classe base é chamado antes o bloco para o construtor é executado. O base palavra-chave pode ser usado com ou sem parâmetros. Os parâmetros do construtor podem ser usados como parâmetros para base, ou como parte de uma expressão. Para obter mais informações, consulte base (C# Reference).

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

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 base usando base.

Um construtor pode chamar outro construtor no mesmo objeto usando o Este palavra-chave. Como base, this pode ser usado com ou sem parâmetros, e quaisquer 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 de this palavra-chave no exemplo anterior faz com que este construtor a ser chamado:

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

Construtores podem ser marcados como pública, particular, protegido, interno, ou protected internal. Definir como usuários da classe podem construir a classe esses modificadores de acesso. Para obter mais informações, consulte Modificadores de acesso.

Um construtor pode ser declarado como estático usando o estático palavra-chave. Construtores estáticos são chamados automaticamente, imediatamente antes de quaisquer campos estáticos são acessados e geralmente são usados para inicializar a membros da classe estática. Para obter mais informações, consulte Construtores estáticos.

Especificação da linguagem C#

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

Consulte também

Referência

Classes e estruturas (guia de programação de C#)

Constructors (C# Programming Guide)

Destructors (C# Programming Guide)

Conceitos

C# Programming Guide