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 Person
classe:
// 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 object
Linguagem de código: texto simples ( texto simples )
Definir um construtor
O exemplo a seguir define um construtor com três parâmetros para a Person
classe:
// 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
, lastName
e 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 Person
objeto, 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 Person
classe 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
firstName
elastName
. - O terceiro construtor aceita três parâmetros e inicializa as propriedades
firstName
,lastName
e .age
Ao fazer isso, você pode criar um novo Person
objeto 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 firstName
e 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 this
palavra-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 this
palavra-chave com os argumentos firstName
e 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 property
Linguagem 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.