Usando construtores (guia de programação do 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ância (guia de programação do 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 estáticas e membros da classe estática (guia de programação do 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 de private (guia de programação 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 (C# Reference).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 Especificação de linguagem do C# A especificação da linguagem é a fonte definitiva para a sintaxe e o uso da linguagem C#.
Consulte também
Referência
Classes e estruturas (guia de programação do C#)
Construtores (guia de programação do C#)
Destruidores (guia de programação do C#)