Partilhar via


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

Sempre que uma instância de uma classe ou uma 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 escreva código flexível e fácil 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 têm lugar pela seguinte ordem:

  1. Os campos de instância são definidos como 0. Isso geralmente é feito pelo tempo de execução.
  2. Os inicializadores de campo são executados. Os inicializadores de campo no tipo mais derivado são executados.
  3. Os inicializadores de campo de tipo base são executados. Inicializadores de campo começando com a base direta através de cada tipo de base para System.Object.
  4. Os construtores de instância base são executados. Qualquer construtor de instância, começando com Object.Object através 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. Os inicializadores de objeto são executados. Se a expressão incluir quaisquer inicializadores de objeto, eles serão executados após a execução do construtor de instância. Os 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 a struct for definida com 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 é o mesmo que o nome de seu tipo. Sua assinatura de método inclui apenas um modificador de acesso opcional, o nome do método e sua lista de parâmetros, não inclui um tipo de retorno. O exemplo a seguir mostra o construtor de uma classe chamada 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 pode ser implementado como uma única instrução, você pode usar uma definição de corpo de expressão. O exemplo a seguir define uma Location classe cujo construtor tem um único parâmetro string chamado name. A definição do corpo da locationName expressão atribui o argumento ao campo.

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 mostraram todos construtores de instância, que criam um novo objeto. Uma classe ou struct também pode ter um construtor estático, que inicializa membros estáticos do tipo. Os construtores estáticos são sem 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 de 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 Secção

Consulte também