Membros com corpo de expressão C#

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 memberser um método, uma propriedade, um construtor, um finalizador ou um indexador.
  • É expressionqualquer 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 Personclasse:

// 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 Personclasse, 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 Personclasse:

// 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 CanVotepropriedade somente leitura à Personclasse:

// 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 CanVotepropriedade é 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 Personclasse 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 Skillclasse cujo construtor possui uma expressão que atribui o nome da habilidade à Namepropriedade:

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 gete setdo 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.

Deixe um comentário

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