Registro C#

Resumo : neste tutorial, você aprenderá sobre o registro C# que fornece funcionalidade integrada para encapsular dados.

Introdução ao registro C#

O registro C# fornece funcionalidade integrada para encapsular dados, facilitando o trabalho com dados imutáveis ​​e de tipo forte.

Os registros são imutáveis ​​por padrão. Isso significa que você não pode alterar (ou alterar) os valores de suas propriedades depois de criados.

Os registros têm suporte integrado para verificação de igualdade baseada em valores, o que significa que dois registros com os mesmos valores são iguais.

Os registros fornecem formatação padrão, que pode ser personalizada substituindo o ToString()método.

Definindo um Registro

Para definir um registro, você usa a recordpalavra-chave com suas propriedades:

record RecordName(type property1, type property2, ..);Linguagem de código:  C#  ( cs )

O exemplo a seguir demonstra como definir um Personregistro com três propriedades FirstName, LastNamee Age:

public record Person(string FirstName, string LastName, int Age);Linguagem de código:  C#  ( cs )

Criando um objeto Record

Para criar uma nova instância de um registro, você pode usar a newpalavra-chave seguida do nome do registro e fornecer os valores de suas propriedades. Por exemplo:

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

Neste exemplo, criamos um novo Personregistro com os valores "John"da FirstNamepropriedade, "Doe"da LastNamepropriedade e 22da Agepropriedade.

Imutabilidade

Os registros são imutáveis ​​por padrão. As seguintes tentativas de alterar o Ageregistro persone causar um erro de compilação:

var person = new Person("John", "Doe", 22);

person.Age = 25; // ERROR

public record Person(string FirstName, string LastName, int Age);Linguagem de código:  PHP  ( php )

Mutação não destrutiva

Se quiser copiar um registro com algumas modificações, você pode usar a withexpressão. Isso é chamado de mutação não destrutiva.

A withexpressão copia um registro existente, com propriedades especificadas alteradas. Por exemplo:

var person = new Person("John", "Doe", 22);

var person2 = person with
{
    FirstName = "Jane",
    Age = 20
};

Console.WriteLine(person2);

public record Person(string FirstName, string LastName, int Age);Linguagem de código:  C#  ( cs )

Saída:

Person { FirstName = Jane, LastName = Doe, Age = 20 }Linguagem de código:  texto simples  ( texto simples )

Neste exemplo, usamos a withexpressão para copiar o personregistro e alterar as propriedades FirstNamee Ageusando a sintaxe do inicializador de objeto para especificar os valores a serem alterados.

Verificação de igualdade baseada em valor

Os registros possuem verificação de igualdade baseada em valores integrada, o que significa que dois registros com os mesmos valores são considerados iguais.

Por exemplo, se você criar dois Personregistros com os mesmos valores, eles serão iguais:

using static System.Console;

var person1 = new Person("John", "Doe", 30);
var person2 = new Person("John", "Doe", 30);

WriteLine(person1 == person2); // True

public record Person(string FirstName, string LastName, int Age);Linguagem de código:  C#  ( cs )

Saída:

TrueLinguagem de código:  PHP  ( php )

Propriedades do registro de desconstrução

Você pode desconstruir um registro em suas propriedades constituintes. Por exemplo:

using static System.Console;

var person = new Person("John", "Doe", 2);
var (FirstName, LastName, Age) = person;

WriteLine($"FirstName: {FirstName}, LastName: {LastName}, Age: {Age}");

public record Person(string FirstName, string LastName, int Age);Linguagem de código:  C#  ( cs )

Saída:

FirstName: John, LastName: Doe, Age: 22Linguagem de código:  texto simples  ( texto simples )

Formatação

Os registros possuem recursos de formatação integrados que permitem especificar como eles devem ser exibidos como uma string. Além disso, você pode obter uma representação em string dos valores do registro usando o ToString()método:

using static System.Console;

var person = new Person("John", "Doe", 22);

WriteLine(person);

public record Person(string FirstName, string LastName, int Age);Linguagem de código:  C#  ( cs )

Saída:

Person { FirstName = John, LastName = Doe, Age = 22 }Linguagem de código:  texto simples  ( texto simples )

Por padrão, o ToString()método usa o nome do registro seguido dos nomes e valores de suas propriedades. Caso queira personalizar a formatação, você pode substituir o ToString()método assim:

using static System.Console;

var person = new Person("John", "Doe", 22);

WriteLine(person);
public record Person(string FirstName, string LastName, int Age)
{
    public override string ToString()
        => $"({FirstName},{LastName},{Age})";
}Linguagem de código:  C#  ( cs )

Saída:

(John,Doe,22)Linguagem de código:  texto simples  ( texto simples )

Definindo registros mutáveis

É possível definir um registro mutável. Por exemplo:

using static System.Console;

var person = new Person { 
    FirstName = "John", 
    LastName = "Doe", 
    Age = 22 
};

person.Age = 25; // OK
person.LastName = "Smith"; // OK

WriteLine(person );

public record Person
{
    public string FirstName { get; set;}
    public string LastName  { get; set;} 
    public int Age { get; set;}
}Linguagem de código:  C#  ( cs )

Saída:

Person { FirstName = John, LastName = Smith, Age = 25 }Linguagem de código:  texto simples  ( texto simples )

Aplicativos de registro C#

Na prática, você pode usar o registro C# nos seguintes cenários:

  • Modelos de resposta de API: você pode usar registros para representar modelos de resposta em APIs RESTful. Neste caso, você pode definir o registro com as propriedades que correspondem aos dados retornados pela API. Os registros ajudam a desserializar facilmente a resposta em um objeto fortemente tipado e a trabalhar com os dados de maneira mais simples.
  • Definições de configuração: você pode usar registros para representar definições de configuração de um aplicativo. Neste caso, você define um registro com as propriedades que correspondem às diversas configurações da aplicação. Isso permite que você passe facilmente as configurações entre métodos e serviços, ao mesmo tempo que impõe a imutabilidade das configurações.
  • Modelos de domínio: você pode usar registros para representar modelos de domínio em um aplicativo. Neste cenário, você define um registro com propriedades que correspondem aos dados que estão sendo modelados. Os registros permitem que você trabalhe facilmente com os dados de maneira imutável e fortemente tipada. Além disso, você pode aproveitar as vantagens dos recursos integrados de verificação de igualdade e formatação de registros.

Resumo

  • O registro C# é um tipo de referência que fornece funcionalidade interna para encapsular dados.
  • Use registros C# em modelos de resposta de API, definições de configuração e modelos de domínio.

Deixe um comentário

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