Atributos C#

Resumo : neste tutorial, você aprenderá como criar atributos C# para adicionar metadados ao seu código e como escrever um atributo personalizado.

Introdução aos atributos C#

Em C#, um atributo é uma tag declarativa que você pode aplicar a classes , métodos, propriedades e outros elementos de código.

Um atributo fornece informações adicionais sobre o elemento de código ao qual é aplicado. Por exemplo, você pode usar um atributo para indicar como um objeto deve ser serializado.

Todos os atributos da classe herdam da System.Attributeclasse. Além de fornecer atributos integrados, você pode criar classes de atributos customizados que estendem a System.Attributeclasse.

O exemplo a seguir demonstra como usar um atributo interno Serializablepara a Personclasse. O Serializableatributo instrui o .NET que a Personclasse pode ser serializada em um formato binário:

[Serializable]
class Person
{
    public string? Name { get; set; }
    public sbyte? Age {  get; set; }
}Linguagem de código:  C#  ( cs )

Por que você precisa de atributos C#?

Os atributos adicionam metadados ao seu código para que o .NET ou outras ferramentas possam usá-los em tempo de execução. Por exemplo, o Visual Studio IDE usa atributos para fornecer sugestões de IntelliSense e de conclusão de código. Além disso, o tempo de execução do .NET usa atributos para determinar como executar seu código.

Os atributos também podem ser úteis para impor convenções de codificação. Por exemplo, você pode usar o Obsoleteatributo para marcar um método de uma classe como obsoleto. Em seguida, o Visual Studio poderá emitir um aviso se você tentar chamar o método obsoleto.

Criando um atributo personalizado

O programa a seguir demonstra como criar um atributo personalizado chamado Author:

[AttributeUsage(AttributeTargets.Class)]
class Author : Attribute
{
    public string Name
    {
        get; set;
    }

    public Author(string name)
    {
        Name = name;
    }
}

[Author("John Doe")]
class Person
{
}

class Program
{
    public static void Main(string[] args)
    {
        // get all custom attributes of the Person class
        var attributes = Attribute.GetCustomAttributes(typeof(Person));

        // Retrieve the author attribute
        var author = attributes.OfType<Author>().Single();
        Console.WriteLine(author.Name);
    }
}Linguagem de código:  C#  ( cs )

Saída:

John Doe

Como funciona.

Primeiro, defina uma classe de atributo personalizada chamada Authorque herde da Attributeclasse:

[AttributeUsage(AttributeTargets.Class)]
class Author : Attribute
{
    public string Name
    {
        get; set;
    }

    public Author(string name)
    {
        Name = name;
    }
}Linguagem de código:  C#  ( cs )

A Authorclasse possui uma Namepropriedade e um construtor que recebe um nameparâmetro.

Além disso, decoramos a Authorclasse com o [AttributeUsage(AttributeTargets.Class)]atributo, que especifica que o atributo Autor só pode ser aplicado a classes.

Segundo, defina uma Personclasse e use o Authoratributo para decorá-la:

[Author("John Doe")]
class Person
{
}
Linguagem de código:  C#  ( cs )

No Authoratributo, definimos a Namepropriedade como "John Doe". Posteriormente, você poderá recuperar essas informações em tempo de execução.

Terceiro, mostre a Namepropriedade do Authoratributo aplicado à Personclasse:

// Get all custom attributes of the Person class
var attributes = Attribute.GetCustomAttributes(typeof(Person));

// Retrieve the author attribute
var author = attributes.OfType<Author>().Single();
Console.WriteLine(author.Name);
Linguagem de código:  JavaScript  ( javascript )

No Main()método, usamos o Attribute.GetCustomAttributesmétodo para recuperar todos os atributos customizados da Personclasse.

Em seguida, usamos o método de extensão OfType LINQ para filtrar a lista de atributos para obter aquele com o tipo Author.

Como a Personclasse possui apenas um Authoratributo, usamos o Singlemétodo para recuperá-lo e exibir sua Namepropriedade no console.

Resumo

  • Atributos são tags declarativas que você pode aplicar a classes, métodos e propriedades.
  • Os atributos fornecem informações adicionais aos elementos de código aos quais se aplicam.
  • Atributos usados System.Attribute​​como classe base.

Deixe um comentário

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