728 x 90


CSharp (C#) 11 – Generic attributes

CSharp (C#) 11 – Generic attributes

Continuando nossa série de artigos com as novidades do C# 11, vulgo CSharp, o que está bem próximo de ser lançado, sendo previsto para o lançamento novas funcionalidades dentro da linguagem. Neste artigo irei demonstrar a funcionalidade Generic attributes. Vale lembrar que, se não preparou seu ambiente de desenvolvimento ainda para as novas features do .NET

Continuando nossa série de artigos com as novidades do C# 11, vulgo CSharp, o que está bem próximo de ser lançado, sendo previsto para o lançamento novas funcionalidades dentro da linguagem.

Neste artigo irei demonstrar a funcionalidade Generic attributes.

Vale lembrar que, se não preparou seu ambiente de desenvolvimento ainda para as novas features do .NET 7, recomendo que leia este artigo antes de iniciar.

Como mencionei anteriormente, estes itens estão ainda em uma versão prévia e é possível que alguns deles não cheguem à versão final do C# 11.

Porém, isto nos dá uma noção do que pode ser a próxima versão do C# e o que esperar.

Generic attributes no C# 11

Com atributos em C# 10, especificar o tipo envolveria a criação de um membro com uma referência de tipo e, em seguida, definir essa referência de tipo no construtor.

Teríamos que especificar o tipo ao fazer referência ao atributo.

public class Attr : Attribute { 
 
    public Type AttributeType { get; }
     
    public Attr(Type attributeType) {
        attributeType = AttributeType;
    }
}
 
public class GenericAttribute
{
    [Attr(typeof(string))] 
    public void MinhaClasse()
    {
 
    }
}

Com o C# 11, podemos tornar esses atributos genéricos. Como resultado, não precisamos de um membro separado para fazer referência ao tipo.

Podemos definir o tipo genérico para o atributo quando o referenciamos.

public class Attr<T1> : Attribute { }
 
public class GenericAttribute<T1>
{
    [Attr<string>] 
    public void MinhaClasse()
    {
 
    }
}

Uma nota de advertência de que os tipos genéricos devem ser totalmente construídos.

No exemplo acima, a classe GenericAttribute tem um tipo genérico T1. Se incluíssemos isso no atributo, um erro de compilação seria lançado.

public class Attr<T1> : Attribute { }
 
public class GenericAttribute<T1>
{
    [Attr<T1>] // This throws a compile error
    public void MinhaClasse()
    {
 
    }
}

Já escrevi anteriormente sobre as outras features que vêm com estas nova versão do C# 11 e disponibilizei todas, em ordem cornológica neste artigo.

Alguns exemplos você pode encontrar lá no GitHub deste site. Até a próxima!

Posts Carousel

Leave a Comment

Your email address will not be published. Required fields are marked with *

Latest Posts

Top Authors

Most Commented

Featured Videos