Resumo : neste tutorial, você aprenderá sobre membros com corpo de expressão para tornar seu código conciso e mais legível.
Introdução aos membros com corpo de expressão
C# introduziu a definição do corpo da expressão para métodos e propriedades somente leitura na versão 6 e a expandiu para propriedades , construtores , finalizadores e indexadores na versão 7.
Uma definição de corpo de expressão possui a seguinte sintaxe:
member => expression;
Linguagem de código: C# ( cs )
Nesta sintaxe:
- Pode
member
ser um método, uma propriedade, um construtor, um finalizador ou um indexador. - É
expression
qualquer expressão válida.
O objetivo da definição do corpo da expressão é tornar o código conciso e mais legível.
Métodos
Se um método tiver uma única expressão que retorne um valor cujo tipo corresponda ao tipo de retorno do método, você poderá usar uma definição de corpo de expressão.
Por exemplo, o exemplo a seguir define a Person
classe:
// Person.cs
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public byte Age { get; set; }
public string GetFullName()
{
return $"{FirstName} {LastName}";
}
}
Linguagem de código: C# ( cs )
Nesta Person
classe, o GetFullName()
método retorna uma string que corresponde ao tipo de retorno do método:
public string GetFullName()
{
return $"{FirstName} {LastName}";
}
Linguagem de código: C# ( cs )
Portanto, você pode usar um método com corpo de expressão da seguinte maneira:
public string GetFullName() => $"{FirstName} {LastName}";
Linguagem de código: C# ( cs )
E aqui está a nova Person
classe:
// Person.cs
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public byte Age { get; set; }
public string GetFullName() => $"{FirstName} {LastName}";
}
Linguagem de código: C# ( cs )
Propriedades somente leitura
A partir do C# 6, você pode usar a definição do corpo da expressão para uma propriedade somente leitura. Por exemplo, o seguinte adiciona a CanVote
propriedade somente leitura à Person
classe:
// Person.cs
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public byte Age { get; set; }
public bool CanVote
{
get
{
return Age >= 16 && Age <= 65;
}
}
public string GetFullName() => $"{FirstName} {LastName}";
}
Linguagem de código: C# ( cs )
Como a CanVote
propriedade é somente leitura, você pode usar uma definição de corpo de expressão como esta:
public bool CanVote => Age >= 16 && Age <= 65;
Linguagem de código: C# ( cs )
Aqui está a Person
classe atualizada:
// Person.cs
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public byte Age { get; set; }
public bool CanVote => Age >= 16 && Age <= 65;
public string GetFullName() => $"{FirstName} {LastName}";
}
Linguagem de código: C# ( cs )
Construtores
O exemplo a seguir define a Skill
classe cujo construtor possui uma expressão que atribui o nome da habilidade à Name
propriedade:
class Skill
{
public string Name { get; set; }
public Skill(string name)
{
Name = name;
}
}
Linguagem de código: C# ( cs )
Portanto, você pode usar a definição do corpo da expressão para o construtor Skill da seguinte maneira:
class Skill
{
public string Name { get; set; }
public Skill(string name) => Name = name;
}
Linguagem de código: C# ( cs )
Indexadores
O exemplo a seguir define a classe Matrix que usa um índice para acessar um elemento em uma linha e coluna:
// Matrix.cs
class Matrix
{
private double[,] data;
public Matrix(int row, int column)
{
data = new double[row, column];
}
public double this[int row, int column]
{
get { return data[row, column]; }
set { data[row, column] = value; }
}
}
Linguagem de código: C# ( cs )
Neste exemplo, os acessadores get
e set
do indexador possuem apenas uma expressão. Portanto, você pode usar uma definição de corpo de expressão da seguinte maneira:
// Matrix.cs
class Matrix
{
private double[,] data;
public Matrix(int row, int column) => data = new double[row, column];
public double this[int row, int column]
{
get => data[row, column];
set => data[row, column] = value;
}
}
Linguagem de código: C# ( cs )
Resumo
- Use os membros com corpo de expressão C# para tornar o código conciso e mais legível.