Construtores C#

Resumo : neste tutorial, você aprenderá sobre os construtores C# e como usá-los para inicializar objetos.

Introdução aos construtores C#

Um construtor é um método especial cujo nome é igual ao nome da classe . O construtor é especial pelos seguintes motivos:

  • Um construtor não possui o tipo de retorno.
  • Ao criar um novo objeto, o compilador C# chama automaticamente o construtor.

Normalmente, você usa um construtor para inicializar o novo objeto atribuindo valores às propriedades do objeto.

O compilador C# cria implicitamente um construtor sem nenhum parâmetro ao definir uma classe. Um construtor sem parâmetro é chamado de construtor sem parâmetros .

Por exemplo, o seguinte define uma Personclasse:

// Person.cs

class Person
{
}Linguagem de código:  C#  ( cs )

C# cria implicitamente um construtor sem quaisquer parâmetros como este:

// Person.cs

class Person
{
    public Person()
    {
    }
}Linguagem de código:  C#  ( cs )

O exemplo a seguir ilustra como o C# chama implicitamente o construtor quando você cria um novo objeto:

// Person.cs

class Person
{
    public Person()
    {
        Console.WriteLine("Create a new Person object");
    }
}Linguagem de código:  C#  ( cs )
// Program.cs

Person p1 = new();Linguagem de código:  C#  ( cs )

Saída:

Create a new Person objectLinguagem de código:  texto simples  ( texto simples )

Definir um construtor

O exemplo a seguir define um construtor com três parâmetros para a Personclasse:

// Person.cs

class Person
{
    private string firstName;
    private string lastName;
    private byte age;

    public Person(string firstName, string lastName, byte age)
    {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

    public string GetFullName()
    {
        return $"{this.firstName} {this.lastName}";
    }
}Linguagem de código:  C#  ( cs )

Neste exemplo, o construtor aceita três argumentos e inicializa as propriedades privadas firstName, lastNamee age.

Depois de definir um construtor explícito, o compilador C# não adiciona implicitamente o construtor sem parâmetros à classe.

Portanto, para criar um novo Personobjeto, você precisa passar três argumentos como os seguintes:

// Program.cs

var p1 = new Person("John", "Doe", 25);Linguagem de código:  C#  ( cs )

Ou

Person p2 = new("John", "Doe", 25);Linguagem de código:  C#  ( cs )

Definir vários construtores para uma classe

C# permite definir vários construtores com parâmetros diferentes para uma classe. Por exemplo:

// Person.cs

class Person
{
    private string firstName;
    private string lastName;
    private byte age;

    public Person()
    {
    }

    public Person(string firstName, string lastName)
    {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public Person(string firstName, string lastName, byte age)
    {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }
}Linguagem de código:  C#  ( cs )

Neste exemplo, a Personclasse possui três construtores.

  • O primeiro construtor é um construtor sem parâmetros que não aceita nenhum parâmetro.
  • O segundo construtor aceita dois parâmetros e inicializa as propriedades firstNamee lastName.
  • O terceiro construtor aceita três parâmetros e inicializa as propriedades firstName, lastNamee .age

Ao fazer isso, você pode criar um novo Personobjeto sem passar nenhum parâmetro, dois parâmetros ou três parâmetros para os respectivos construtores:

// Program.cs

var p1 = new Person();
var p2 = new Person("John","Doe");
var p3 = new Person("John", "Doe",25);Linguagem de código:  C#  ( cs )

O código nos construtores é duplicado na inicialização das propriedades firstNamee lastName. Para corrigir isso, você pode chamar um construtor em outro construtor, conforme mostrado no exemplo a seguir:

// Person.cs

class Person
{
    private string firstName;
    private string lastName;
    private byte age;

    public Person()
    {
        Console.WriteLine("Initialized the object");
    }

    public Person(string firstName, string lastName) : this()
    {
        this.firstName = firstName;
        this.lastName = lastName;

        Console.WriteLine("Initialized the first name & last name properties");
    }

    public Person(string firstName, string lastName, byte age) : this(firstName, lastName)
    {
        this.age = age;
        Console.WriteLine("Initialized the age property");
    }
}Linguagem de código:  C#  ( cs )

Neste exemplo, o segundo construtor chama o primeiro construtor através da thispalavra-chave:

public Person(string firstName, string lastName) : this()Linguagem de código:  C#  ( cs )

Quando você cria um objeto com dois parâmetros, este construtor chamará o construtor sem parâmetros ( this()) antes de executar seu corpo.

O terceiro construtor chama o segundo construtor através da thispalavra-chave com os argumentos firstNamee lastName:

public Person(string firstName, string lastName, byte age) : this(firstName, lastName)Linguagem de código:  C#  ( cs )

Se você criar um novo objeto com três argumentos, o terceiro construtor chamará o segundo construtor, que chama o primeiro construtor.

Portanto, os construtores serão executados na seguinte sequência:

public Person()
public Person(string firstName, string lastName) : this()
public Person(string firstName, string lastName, byte age) : this(firstName, lastName)Linguagem de código:  C#  ( cs )

Por exemplo:

// Program.cs

var p1 = new Person("John","Doe", 25);Linguagem de código:  C#  ( cs )

Saída:

Initialized the object
Initialized the first name & last name properties
Initialized the age propertyLinguagem de código:  texto simples  ( texto simples )

Fazendo isso, você pode reutilizar a lógica de outros construtores ao inicializar os objetos

Resumo

  • O construtor C# é um método especial cujo nome é igual ao nome da classe.
  • O compilador C# chama automaticamente o construtor quando você cria um novo objeto.
  • Use os construtores para inicializar objetos.
  • Use vários construtores em uma classe para tornar mais flexível a inicialização de um novo objeto.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *