Attribute Classe

Definição

Representa a classe base para atributos personalizados.

public ref class Attribute abstract
public ref class Attribute abstract : System::Runtime::InteropServices::_Attribute
[System.AttributeUsage(System.AttributeTargets.All, AllowMultiple=false, Inherited=true)]
public abstract class Attribute
[System.AttributeUsage(System.AttributeTargets.All, AllowMultiple=false, Inherited=true)]
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Serializable]
public abstract class Attribute : System.Runtime.InteropServices._Attribute
[System.AttributeUsage(System.AttributeTargets.All, AllowMultiple=false, Inherited=true)]
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class Attribute : System.Runtime.InteropServices._Attribute
[<System.AttributeUsage(System.AttributeTargets.All, AllowMultiple=false, Inherited=true)>]
type Attribute = class
[<System.AttributeUsage(System.AttributeTargets.All, AllowMultiple=false, Inherited=true)>]
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
[<System.Serializable>]
type Attribute = class
    interface _Attribute
[<System.AttributeUsage(System.AttributeTargets.All, AllowMultiple=false, Inherited=true)>]
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Attribute = class
    interface _Attribute
Public MustInherit Class Attribute
Public MustInherit Class Attribute
Implements _Attribute
Herança
Attribute
Derivado
Atributos
Implementações

Exemplos

O exemplo de código a seguir demonstra o uso de Attribute.

using namespace System;
using namespace System::Reflection;

// An enumeration of animals. Start at 1 (0 = uninitialized).
public enum class Animal
{
    // Pets.
    Dog = 1,
    Cat, Bird
};

// A custom attribute to allow a target to have a pet.
public ref class AnimalTypeAttribute: public Attribute
{
public:

    // The constructor is called when the attribute is set.
    AnimalTypeAttribute( Animal pet )
    {
        thePet = pet;
    }


protected:

    // Keep a variable internally ...
    Animal thePet;

public:

    property Animal Pet 
    {
        // .. and show a copy to the outside world.
        Animal get()
        {
            return thePet;
        }

        void set( Animal value )
        {
            thePet = value;
        }
    }
};

// A test class where each method has its own pet.
ref class AnimalTypeTestClass
{
public:

    [AnimalType(Animal::Dog)]
    void DogMethod(){}


    [AnimalType(Animal::Cat)]
    void CatMethod(){}

    [AnimalType(Animal::Bird)]
    void BirdMethod(){}

};

int main()
{
    AnimalTypeTestClass^ testClass = gcnew AnimalTypeTestClass;
    Type^ type = testClass->GetType();

    // Iterate through all the methods of the class.
    System::Collections::IEnumerator^ myEnum = 
        type->GetMethods()->GetEnumerator();
    while ( myEnum->MoveNext() )
    {
        MethodInfo^ mInfo = safe_cast<MethodInfo^>(myEnum->Current);

        // Iterate through all the Attributes for each method.
        System::Collections::IEnumerator^ myEnum1 = 
            Attribute::GetCustomAttributes( mInfo )->GetEnumerator();
        while ( myEnum1->MoveNext() )
        {
            Attribute^ attr = safe_cast<Attribute^>(myEnum1->Current);

            // Check for the AnimalType attribute.
            if ( attr->GetType() == AnimalTypeAttribute::typeid )
                Console::WriteLine( "Method {0} has a pet {1} attribute.", 
                mInfo->Name, (dynamic_cast<AnimalTypeAttribute^>(attr))->Pet );
        }
    }
}

/*
 * Output:
 * Method DogMethod has a pet Dog attribute.
 * Method CatMethod has a pet Cat attribute.
 * Method BirdMethod has a pet Bird attribute.
 */
using System;
using System.Reflection;

// An enumeration of animals. Start at 1 (0 = uninitialized).
public enum Animal {
    // Pets.
    Dog = 1,
    Cat,
    Bird,
}

// A custom attribute to allow a target to have a pet.
public class AnimalTypeAttribute : Attribute {
    // The constructor is called when the attribute is set.
    public AnimalTypeAttribute(Animal pet) {
        thePet = pet;
    }

    // Keep a variable internally ...
    protected Animal thePet;

    // .. and show a copy to the outside world.
    public Animal Pet {
        get { return thePet; }
        set { thePet = value; }
    }
}

// A test class where each method has its own pet.
class AnimalTypeTestClass {
    [AnimalType(Animal.Dog)]
    public void DogMethod() {}

    [AnimalType(Animal.Cat)]
    public void CatMethod() {}

    [AnimalType(Animal.Bird)]
    public void BirdMethod() {}
}

class DemoClass {
    static void Main(string[] args) {
        AnimalTypeTestClass testClass = new AnimalTypeTestClass();
        Type type = testClass.GetType();
        // Iterate through all the methods of the class.
        foreach(MethodInfo mInfo in type.GetMethods()) {
            // Iterate through all the Attributes for each method.
            foreach (Attribute attr in
                Attribute.GetCustomAttributes(mInfo)) {
                // Check for the AnimalType attribute.
                if (attr.GetType() == typeof(AnimalTypeAttribute))
                    Console.WriteLine(
                        "Method {0} has a pet {1} attribute.",
                        mInfo.Name, ((AnimalTypeAttribute)attr).Pet);
            }
        }
    }
}
/*
 * Output:
 * Method DogMethod has a pet Dog attribute.
 * Method CatMethod has a pet Cat attribute.
 * Method BirdMethod has a pet Bird attribute.
 */
open System

// An enumeration of animals. Start at 1 (0 = uninitialized).
type Animal =
    | Dog = 1
    | Cat = 2
    | Bird = 3

// A custom attribute to allow a target to have a pet.
type AnimalTypeAttribute(pet) =
    inherit Attribute()
    member val Pet = pet with get, set

// A test class where each method has its own pet.
type AnimalTypeTestClass() =
    [<AnimalType(Animal.Dog)>]
    member _.DogMethod() = ()

    [<AnimalType(Animal.Cat)>]
    member _.CatMethod() = ()

    [<AnimalType(Animal.Bird)>]
    member _.BirdMethod() = ()

let testClass = AnimalTypeTestClass()
let clsType = testClass.GetType()
// Iterate through all the methods of the class.
for mInfo in clsType.GetMethods() do
    // Iterate through all the Attributes for each method.
    for attr in Attribute.GetCustomAttributes mInfo do
        // Check for the AnimalType attribute.
        if attr.GetType() = typeof<AnimalTypeAttribute> then
            printfn $"Method {mInfo.Name} has a pet {(attr :?> AnimalTypeAttribute).Pet} attribute."

// Output:
//   Method DogMethod has a pet Dog attribute.
//   Method CatMethod has a pet Cat attribute.
//   Method BirdMethod has a pet Bird attribute.
Imports System.Reflection

Public Module CustomAttrVB

    ' An enumeration of animals. Start at 1 (0 = uninitialized).
    Public Enum Animal
        ' Pets
        Dog = 1
        Cat
        Bird
    End Enum

    ' Visual Basic requires the AttributeUsage be specified.
    ' A custom attribute to allow a target to have a pet.
    <AttributeUsage(AttributeTargets.Method)> _
    Public Class AnimalTypeAttribute
        Inherits Attribute

        ' The constructor is called when the attribute is set.
        Public Sub New(ByVal animal As Animal)
            Me.thePet = animal
        End Sub

        ' Keep a variable internally ...
        Protected thePet As Animal

        ' .. and show a copy to the outside world.
        Public Property Pet() As Animal
            Get
                Return thePet
            End Get
            Set(ByVal Value As Animal)
                thePet = Value
            End Set
        End Property

    End Class

    ' A test class where each method has its own pet.
    Class AnimalTypeTestClass

        <AnimalType(Animal.Dog)> _
        Public Sub DogMethod()
        End Sub

        <AnimalType(Animal.Cat)> _
        Public Sub CatMethod()
        End Sub

        <AnimalType(Animal.Bird)> _
        Public Sub BirdMethod()
        End Sub
    End Class

    ' The runtime test.
    Sub Main()
        Dim testClass As New AnimalTypeTestClass()
        Dim tcType As Type = testClass.GetType()
        Dim mInfo As MethodInfo
        ' Iterate through all the methods of the class.
        For Each mInfo In tcType.GetMethods()
            Dim attr As Attribute
            ' Iterate through all the attributes of the method.
            For Each attr In Attribute.GetCustomAttributes(mInfo)
                If TypeOf attr Is AnimalTypeAttribute Then
                    Dim attrCustom As AnimalTypeAttribute = _
                        CType(attr, AnimalTypeAttribute)
                    Console.WriteLine("Method {0} has a pet {1} attribute.", _
                         mInfo.Name(), attrCustom.Pet.ToString())
                End If
            Next
        Next
    End Sub
End Module

' Output:
' Method DogMethod has a pet Dog attribute.
' Method CatMethod has a pet Cat attribute.
' Method BirdMethod has a pet Bird attribute.

Comentários

A classe Attribute associa informações predefinidas do sistema ou informações personalizadas definidas pelo usuário a um elemento de destino. Um elemento de destino pode ser um assembly, classe, construtor, delegado, enumeração, evento, campo, interface, método, módulo de arquivo executável portátil, parâmetro, propriedade, valor de retorno, struct ou outro atributo.

As informações fornecidas por um atributo também são conhecidas como metadados. Os metadados podem ser examinados em tempo de execução pelo aplicativo para controlar como o programa processa dados ou antes do tempo de execução por ferramentas externas para controlar como o próprio aplicativo é processado ou mantido. Por exemplo, o .NET predefini e usa tipos de atributo para controlar o comportamento em tempo de execução, e algumas linguagens de programação usam tipos de atributo para representar recursos de linguagem que não são diretamente compatíveis com o sistema de tipos comuns do .NET.

Todos os tipos de atributo derivam direta ou indiretamente da classe Attribute. Os atributos podem ser aplicados a qualquer elemento de destino; vários atributos podem ser aplicados ao mesmo elemento de destino; e atributos podem ser herdados por um elemento derivado de um elemento de destino. Use a classe AttributeTargets para especificar o elemento de destino ao qual o atributo é aplicado.

A classe Attribute fornece métodos convenientes para recuperar e testar atributos personalizados. Para obter mais informações sobre como usar atributos, consulte Aplicando atributos e atributos .

Construtores

Attribute()

Inicializa uma nova instância da classe Attribute.

Propriedades

TypeId

Quando implementado em uma classe derivada, obtém um identificador exclusivo para esse Attribute.

Métodos

Equals(Object)

Retorna um valor que indica se essa instância é igual a um objeto especificado.

GetCustomAttribute(Assembly, Type)

Recupera um atributo personalizado aplicado a um assembly especificado. Os parâmetros especificam o assembly e o tipo do atributo personalizado a ser pesquisado.

GetCustomAttribute(Assembly, Type, Boolean)

Recupera um atributo personalizado aplicado a um assembly. Os parâmetros especificam o assembly, o tipo do atributo personalizado a ser pesquisado e uma opção de pesquisa ignorada.

GetCustomAttribute(MemberInfo, Type)

Recupera um atributo personalizado aplicado a um membro de um tipo. Os parâmetros especificam o membro e o tipo do atributo personalizado a ser pesquisado.

GetCustomAttribute(MemberInfo, Type, Boolean)

Recupera um atributo personalizado aplicado a um membro de um tipo. Os parâmetros especificam o membro, o tipo do atributo personalizado a ser pesquisado e se deseja pesquisar ancestrais do membro.

GetCustomAttribute(Module, Type)

Recupera um atributo personalizado aplicado a um módulo. Os parâmetros especificam o módulo e o tipo do atributo personalizado a ser pesquisado.

GetCustomAttribute(Module, Type, Boolean)

Recupera um atributo personalizado aplicado a um módulo. Os parâmetros especificam o módulo, o tipo do atributo personalizado a ser pesquisado e uma opção de pesquisa ignorada.

GetCustomAttribute(ParameterInfo, Type)

Recupera um atributo personalizado aplicado a um parâmetro de método. Os parâmetros especificam o parâmetro do método e o tipo do atributo personalizado a ser pesquisado.

GetCustomAttribute(ParameterInfo, Type, Boolean)

Recupera um atributo personalizado aplicado a um parâmetro de método. Os parâmetros especificam o parâmetro do método, o tipo do atributo personalizado a ser pesquisado e se deseja pesquisar ancestrais do parâmetro de método.

GetCustomAttributes(Assembly)

Recupera uma matriz dos atributos personalizados aplicados a um assembly. Um parâmetro especifica o assembly.

GetCustomAttributes(Assembly, Boolean)

Recupera uma matriz dos atributos personalizados aplicados a um assembly. Os parâmetros especificam o assembly e uma opção de pesquisa ignorada.

GetCustomAttributes(Assembly, Type)

Recupera uma matriz dos atributos personalizados aplicados a um assembly. Os parâmetros especificam o assembly e o tipo do atributo personalizado a ser pesquisado.

GetCustomAttributes(Assembly, Type, Boolean)

Recupera uma matriz dos atributos personalizados aplicados a um assembly. Os parâmetros especificam o assembly, o tipo do atributo personalizado a ser pesquisado e uma opção de pesquisa ignorada.

GetCustomAttributes(MemberInfo)

Recupera uma matriz dos atributos personalizados aplicados a um membro de um tipo. Um parâmetro especifica o membro.

GetCustomAttributes(MemberInfo, Boolean)

Recupera uma matriz dos atributos personalizados aplicados a um membro de um tipo. Os parâmetros especificam o membro, o tipo do atributo personalizado a ser pesquisado e se deseja pesquisar ancestrais do membro.

GetCustomAttributes(MemberInfo, Type)

Recupera uma matriz dos atributos personalizados aplicados a um membro de um tipo. Os parâmetros especificam o membro e o tipo do atributo personalizado a ser pesquisado.

GetCustomAttributes(MemberInfo, Type, Boolean)

Recupera uma matriz dos atributos personalizados aplicados a um membro de um tipo. Os parâmetros especificam o membro, o tipo do atributo personalizado a ser pesquisado e se deseja pesquisar ancestrais do membro.

GetCustomAttributes(Module)

Recupera uma matriz dos atributos personalizados aplicados a um módulo. Um parâmetro especifica o módulo.

GetCustomAttributes(Module, Boolean)

Recupera uma matriz dos atributos personalizados aplicados a um módulo. Os parâmetros especificam o módulo e uma opção de pesquisa ignorada.

GetCustomAttributes(Module, Type)

Recupera uma matriz dos atributos personalizados aplicados a um módulo. Os parâmetros especificam o módulo e o tipo do atributo personalizado a ser pesquisado.

GetCustomAttributes(Module, Type, Boolean)

Recupera uma matriz dos atributos personalizados aplicados a um módulo. Os parâmetros especificam o módulo, o tipo do atributo personalizado a ser pesquisado e uma opção de pesquisa ignorada.

GetCustomAttributes(ParameterInfo)

Recupera uma matriz dos atributos personalizados aplicados a um parâmetro de método. Um parâmetro especifica o parâmetro do método.

GetCustomAttributes(ParameterInfo, Boolean)

Recupera uma matriz dos atributos personalizados aplicados a um parâmetro de método. Os parâmetros especificam o parâmetro do método e se os ancestrais do parâmetro de método devem ser pesquisados.

GetCustomAttributes(ParameterInfo, Type)

Recupera uma matriz dos atributos personalizados aplicados a um parâmetro de método. Os parâmetros especificam o parâmetro do método e o tipo do atributo personalizado a ser pesquisado.

GetCustomAttributes(ParameterInfo, Type, Boolean)

Recupera uma matriz dos atributos personalizados aplicados a um parâmetro de método. Os parâmetros especificam o parâmetro do método, o tipo do atributo personalizado a ser pesquisado e se deseja pesquisar ancestrais do parâmetro de método.

GetHashCode()

Retorna o código hash dessa instância.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
IsDefaultAttribute()

Quando substituído em uma classe derivada, indica se o valor dessa instância é o valor padrão para a classe derivada.

IsDefined(Assembly, Type)

Determina se os atributos personalizados são aplicados a um assembly. Os parâmetros especificam o assembly e o tipo do atributo personalizado a ser pesquisado.

IsDefined(Assembly, Type, Boolean)

Determina se os atributos personalizados são aplicados a um assembly. Os parâmetros especificam o assembly, o tipo do atributo personalizado a ser pesquisado e uma opção de pesquisa ignorada.

IsDefined(MemberInfo, Type)

Determina se os atributos personalizados são aplicados a um membro de um tipo. Os parâmetros especificam o membro e o tipo do atributo personalizado a ser pesquisado.

IsDefined(MemberInfo, Type, Boolean)

Determina se os atributos personalizados são aplicados a um membro de um tipo. Os parâmetros especificam o membro, o tipo do atributo personalizado a ser pesquisado e se deseja pesquisar ancestrais do membro.

IsDefined(Module, Type)

Determina se os atributos personalizados de um tipo especificado são aplicados a um módulo. Os parâmetros especificam o módulo e o tipo do atributo personalizado a ser pesquisado.

IsDefined(Module, Type, Boolean)

Determina se os atributos personalizados são aplicados a um módulo. Os parâmetros especificam o módulo, o tipo do atributo personalizado a ser pesquisado e uma opção de pesquisa ignorada.

IsDefined(ParameterInfo, Type)

Determina se os atributos personalizados são aplicados a um parâmetro de método. Os parâmetros especificam o parâmetro do método e o tipo do atributo personalizado a ser pesquisado.

IsDefined(ParameterInfo, Type, Boolean)

Determina se os atributos personalizados são aplicados a um parâmetro de método. Os parâmetros especificam o parâmetro do método, o tipo do atributo personalizado a ser pesquisado e se deseja pesquisar ancestrais do parâmetro de método.

Match(Object)

Quando substituído em uma classe derivada, retorna um valor que indica se essa instância é igual a um objeto especificado.

MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Implantações explícitas de interface

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de expedição.

_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera as informações de tipo de um objeto, que podem ser usadas para obter as informações de tipo de uma interface.

_Attribute.GetTypeInfoCount(UInt32)

Recupera o número de interfaces de informações de tipo que um objeto fornece (0 ou 1).

_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornece acesso a propriedades e métodos expostos por um objeto.

Aplica-se a

Acesso thread-safe

Esse tipo é thread safe.

Confira também