Construtores (guia de programação em C#)

Sempre que uma instância de uma classe ou um struct é criada, seu construtor é chamado. Uma classe ou struct pode ter vários construtores que usam argumentos diferentes. Os construtores permitem que o programador defina valores padrão, limite a instanciação e grave códigos flexíveis e fáceis de ler. Para obter mais informações e exemplos, consulte Construtores de Instância e Usando Construtores.

Há várias ações que fazem parte da inicialização de uma nova instância. Essas ações ocorrem na seguinte ordem:

  1. Os campos de instância são definidos como 0. Normalmente, isso é feito pelo runtime.
  2. Inicializadores de campo são executados. Os inicializadores de campo no tipo mais derivado são executados.
  3. Inicializadores de campo de tipo base são executados. Inicializadores de campo começando com a base direta por meio de cada tipo base para System.Object.
  4. Construtores de instância base são executados. Quaisquer construtores de instância, começando com Object.Object por meio de cada classe base para a classe base direta.
  5. O construtor de instância é executado. O construtor de instância para o tipo é executado.
  6. Inicializadores de objeto são executados. Se a expressão incluir qualquer inicializador de objeto, eles são executados após a execução do construtor de instância. Inicializadores de objeto são executados na ordem textual.

As ações anteriores ocorrem quando uma nova instância é inicializada. Se uma nova instância de um struct for definida como seu default valor, todos os campos de instância serão definidos como 0.

Se o construtor estático não tiver sido executado, o construtor estático será executado antes que qualquer uma das ações do construtor de instância ocorra.

Sintaxe do construtor

Um construtor é um método cujo nome é igual ao nome de seu tipo. Sua assinatura do método inclui apenas um modificador de acesso opcional, o nome do método e sua lista de parâmetros; ela não inclui tipo de retorno. O exemplo a seguir mostra o construtor para uma classe denominada Person.

public class Person
{
   private string last;
   private string first;

   public Person(string lastName, string firstName)
   {
      last = lastName;
      first = firstName;
   }

   // Remaining implementation of Person class.
}

Se um construtor puder ser implementado como uma única instrução, você poderá usar uma definição de corpo da expressão. O exemplo a seguir define uma classe Location cujo construtor tem um único parâmetro de cadeia de caracteres chamado nome. A definição de corpo da expressão atribui o argumento ao campo locationName.

public class Location
{
   private string locationName;

   public Location(string name) => Name = name;

   public string Name
   {
      get => locationName;
      set => locationName = value;
   }
}

Construtores estáticos

Os exemplos anteriores têm todos os construtores de instância mostrado, que criam um novo objeto. Uma classe ou struct também pode ter um construtor estático, que inicializa membros estáticos do tipo. Construtores estáticos não têm parâmetros. Se você não fornecer um construtor estático para inicializar campos estáticos, o compilador C# inicializará campos estáticos com seu valor padrão, conforme listado no artigo Valores padrão de tipos C#.

O exemplo a seguir usa um construtor estático para inicializar um campo estático.

public class Adult : Person
{
   private static int minimumAge;

   public Adult(string lastName, string firstName) : base(lastName, firstName)
   { }

   static Adult()
   {
      minimumAge = 18;
   }

   // Remaining implementation of Adult class.
}

Você também pode definir um construtor estático com uma definição de corpo da expressão, como mostra o exemplo a seguir.

public class Child : Person
{
   private static int maximumAge;

   public Child(string lastName, string firstName) : base(lastName, firstName)
   { }

   static Child() => maximumAge = 18;

   // Remaining implementation of Child class.
}

Para obter mais informações e exemplos, consulte Construtores Estáticos.

Nesta seção

Usando construtores

Construtores de instância

Construtores particulares

Construtores estáticos

Como escrever um construtor de cópia

Confira também