C# 11 -  Suporte aos atributos genéricos


  Hoje veremos o novo recurso do C# 11 :  Suporte aos atributos genéricos.

Para entender melhor este recurso vamos iniciar definindo o que são atributos.

A plataforma .NET possui a classe System.Attribute e qualquer classe derivada desta é basicamente chamada de atributo.

Atributos são tipos especiais de classes que podem ser usados para decorar outros tipos/campos. Estes basicamente fornecem funcionalidades adicionais aos tipos/campos onde esses atributos são colocados.

Um uso muito comum de atributos pode ser encontrado em tipos que são usados para serializações (atributos JsonProperty ou JsonPropertyName) ou na ASP.NET Core com o uso dos atributos de validação Data Annotations como : [Required], [Range], [StringLength], etc.

Como eram passados os parâmetros de tipo para atributos?

Antes do C# 11, sempre que você precisava criar uma implementação de atributo genérico, o padrão a ser seguido era o seguinte:

O trecho de código abaixo mostra um exemplo. Apenas uma classe de atributo simples é criada e leva System.Type como parâmetro. Ao usar este atributo, podemos usar o operador typeof, seguido do nome do tipo que queremos passar:

Usando atributos genéricos

O novo recurso do C# 11 adiciona suporte para atributos genéricos.

Então, basicamente, ao invés de passar System.Type como parâmetro para o construtor, podemos definir uma classe genérica, como qualquer outra classe genérica e esta classe pode aceitar um ou mais tipos como parâmetro.

Qual é a vantagem?

Se você está se perguntando qual é a vantagem dessa abordagem sobre a anterior, eu diria segurança de tipo.

Devido à classe genérica, você pode especificar restrições apropriadas no parâmetro de tipo para garantir que o desenvolvedor saiba antecipadamente (durante o tempo de compilação) se o tipo passado é permitido de acordo com as restrições ou não.

Quais tipos são (não) permitidos?

Existem alguns tipos que não são permitidos por atributos genéricos. Os tipos que precisam de anotações de metadados não são permitidos.

E estamos conversados...

"Porque todos pecaram e destituídos estão da glória de Deus;
Sendo justificados gratuitamente pela sua graça, pela redenção que há em Cristo Jesus."
Romanos 3:23,24

Referências:


José Carlos Macoratti