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:
NET - Unit of Work - Padrão Unidade de ...