Compartir a través de


Attribute Clase

Definición

Representa la clase base para los 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
Herencia
Attribute
Derivado
Atributos
Implementaciones

Ejemplos

En el ejemplo de código siguiente se muestra el 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.

Comentarios

La clase Attribute asocia información predefinida del sistema o información personalizada definida por el usuario con un elemento de destino. Un elemento de destino puede ser un ensamblado, clase, constructor, delegado, enumeración, evento, campo, interfaz, método, módulo de archivo ejecutable portátil, parámetro, propiedad, valor devuelto, estructura u otro atributo.

La información proporcionada por un atributo también se conoce como metadatos. La aplicación puede examinar los metadatos en tiempo de ejecución para controlar cómo procesa el programa los datos o antes del tiempo de ejecución por parte de herramientas externas para controlar cómo se procesa o mantiene la propia aplicación. Por ejemplo, .NET predefines y usa tipos de atributo para controlar el comportamiento en tiempo de ejecución y algunos lenguajes de programación usan tipos de atributo para representar características de lenguaje no admitidas directamente por el sistema de tipos comunes de .NET.

Todos los tipos de atributo derivan directa o indirectamente de la clase Attribute. Los atributos se pueden aplicar a cualquier elemento de destino; se pueden aplicar varios atributos al mismo elemento de destino; Un elemento derivado de un elemento de destino puede heredar los atributos y . Use la clase AttributeTargets para especificar el elemento de destino al que se aplica el atributo.

La clase Attribute proporciona métodos prácticos para recuperar y probar atributos personalizados. Para obtener más información sobre el uso de atributos, vea Aplicar atributos y atributos de .

Constructores

Attribute()

Inicializa una nueva instancia de la clase Attribute.

Propiedades

TypeId

Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute.

Métodos

Equals(Object)

Devuelve un valor que indica si esta instancia es igual a un objeto especificado.

GetCustomAttribute(Assembly, Type)

Recupera un atributo personalizado aplicado a un ensamblado especificado. Los parámetros especifican el ensamblado y el tipo del atributo personalizado que se va a buscar.

GetCustomAttribute(Assembly, Type, Boolean)

Recupera un atributo personalizado aplicado a un ensamblado. Los parámetros especifican el ensamblado, el tipo del atributo personalizado que se va a buscar y una opción de búsqueda omitida.

GetCustomAttribute(MemberInfo, Type)

Recupera un atributo personalizado aplicado a un miembro de un tipo. Los parámetros especifican el miembro y el tipo del atributo personalizado que se va a buscar.

GetCustomAttribute(MemberInfo, Type, Boolean)

Recupera un atributo personalizado aplicado a un miembro de un tipo. Los parámetros especifican el miembro, el tipo del atributo personalizado que se va a buscar y si se van a buscar antecesores del miembro.

GetCustomAttribute(Module, Type)

Recupera un atributo personalizado aplicado a un módulo. Los parámetros especifican el módulo y el tipo del atributo personalizado que se va a buscar.

GetCustomAttribute(Module, Type, Boolean)

Recupera un atributo personalizado aplicado a un módulo. Los parámetros especifican el módulo, el tipo del atributo personalizado que se va a buscar y una opción de búsqueda omitida.

GetCustomAttribute(ParameterInfo, Type)

Recupera un atributo personalizado aplicado a un parámetro de método. Los parámetros especifican el parámetro de método y el tipo del atributo personalizado que se va a buscar.

GetCustomAttribute(ParameterInfo, Type, Boolean)

Recupera un atributo personalizado aplicado a un parámetro de método. Los parámetros especifican el parámetro de método, el tipo del atributo personalizado que se va a buscar y si se van a buscar antecesores del parámetro de método.

GetCustomAttributes(Assembly)

Recupera una matriz de los atributos personalizados aplicados a un ensamblado. Un parámetro especifica el ensamblado.

GetCustomAttributes(Assembly, Boolean)

Recupera una matriz de los atributos personalizados aplicados a un ensamblado. Los parámetros especifican el ensamblado y una opción de búsqueda omitida.

GetCustomAttributes(Assembly, Type)

Recupera una matriz de los atributos personalizados aplicados a un ensamblado. Los parámetros especifican el ensamblado y el tipo del atributo personalizado que se va a buscar.

GetCustomAttributes(Assembly, Type, Boolean)

Recupera una matriz de los atributos personalizados aplicados a un ensamblado. Los parámetros especifican el ensamblado, el tipo del atributo personalizado que se va a buscar y una opción de búsqueda omitida.

GetCustomAttributes(MemberInfo)

Recupera una matriz de los atributos personalizados aplicados a un miembro de un tipo. Un parámetro especifica el miembro.

GetCustomAttributes(MemberInfo, Boolean)

Recupera una matriz de los atributos personalizados aplicados a un miembro de un tipo. Los parámetros especifican el miembro, el tipo del atributo personalizado que se va a buscar y si se van a buscar antecesores del miembro.

GetCustomAttributes(MemberInfo, Type)

Recupera una matriz de los atributos personalizados aplicados a un miembro de un tipo. Los parámetros especifican el miembro y el tipo del atributo personalizado que se va a buscar.

GetCustomAttributes(MemberInfo, Type, Boolean)

Recupera una matriz de los atributos personalizados aplicados a un miembro de un tipo. Los parámetros especifican el miembro, el tipo del atributo personalizado que se va a buscar y si se van a buscar antecesores del miembro.

GetCustomAttributes(Module)

Recupera una matriz de los atributos personalizados aplicados a un módulo. Un parámetro especifica el módulo.

GetCustomAttributes(Module, Boolean)

Recupera una matriz de los atributos personalizados aplicados a un módulo. Los parámetros especifican el módulo y una opción de búsqueda ignorada.

GetCustomAttributes(Module, Type)

Recupera una matriz de los atributos personalizados aplicados a un módulo. Los parámetros especifican el módulo y el tipo del atributo personalizado que se va a buscar.

GetCustomAttributes(Module, Type, Boolean)

Recupera una matriz de los atributos personalizados aplicados a un módulo. Los parámetros especifican el módulo, el tipo del atributo personalizado que se va a buscar y una opción de búsqueda omitida.

GetCustomAttributes(ParameterInfo)

Recupera una matriz de los atributos personalizados aplicados a un parámetro de método. Un parámetro especifica el parámetro de método.

GetCustomAttributes(ParameterInfo, Boolean)

Recupera una matriz de los atributos personalizados aplicados a un parámetro de método. Los parámetros especifican el parámetro de método y si se van a buscar antecesores del parámetro de método.

GetCustomAttributes(ParameterInfo, Type)

Recupera una matriz de los atributos personalizados aplicados a un parámetro de método. Los parámetros especifican el parámetro de método y el tipo del atributo personalizado que se va a buscar.

GetCustomAttributes(ParameterInfo, Type, Boolean)

Recupera una matriz de los atributos personalizados aplicados a un parámetro de método. Los parámetros especifican el parámetro de método, el tipo del atributo personalizado que se va a buscar y si se van a buscar antecesores del parámetro de método.

GetHashCode()

Devuelve el código hash de esta instancia.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
IsDefaultAttribute()

Cuando se reemplaza en una clase derivada, indica si el valor de esta instancia es el valor predeterminado de la clase derivada.

IsDefined(Assembly, Type)

Determina si se aplican atributos personalizados a un ensamblado. Los parámetros especifican el ensamblado y el tipo del atributo personalizado que se va a buscar.

IsDefined(Assembly, Type, Boolean)

Determina si se aplican atributos personalizados a un ensamblado. Los parámetros especifican el ensamblado, el tipo del atributo personalizado que se va a buscar y una opción de búsqueda omitida.

IsDefined(MemberInfo, Type)

Determina si se aplican atributos personalizados a un miembro de un tipo. Los parámetros especifican el miembro y el tipo del atributo personalizado que se va a buscar.

IsDefined(MemberInfo, Type, Boolean)

Determina si se aplican atributos personalizados a un miembro de un tipo. Los parámetros especifican el miembro, el tipo del atributo personalizado que se va a buscar y si se van a buscar antecesores del miembro.

IsDefined(Module, Type)

Determina si se aplican atributos personalizados de un tipo especificado a un módulo. Los parámetros especifican el módulo y el tipo del atributo personalizado que se va a buscar.

IsDefined(Module, Type, Boolean)

Determina si se aplican atributos personalizados a un módulo. Los parámetros especifican el módulo, el tipo del atributo personalizado que se va a buscar y una opción de búsqueda omitida.

IsDefined(ParameterInfo, Type)

Determina si se aplican atributos personalizados a un parámetro de método. Los parámetros especifican el parámetro de método y el tipo del atributo personalizado que se va a buscar.

IsDefined(ParameterInfo, Type, Boolean)

Determina si se aplican atributos personalizados a un parámetro de método. Los parámetros especifican el parámetro de método, el tipo del atributo personalizado que se va a buscar y si se van a buscar antecesores del parámetro de método.

Match(Object)

Cuando se reemplaza en una clase derivada, devuelve un valor que indica si esta instancia es igual a un objeto especificado.

MemberwiseClone()

Crea una copia superficial del Objectactual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Implementaciones de interfaz explícitas

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

Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío.

_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera la información de tipo de un objeto, que se puede usar para obtener la información de tipo de una interfaz.

_Attribute.GetTypeInfoCount(UInt32)

Recupera el número de interfaces de información de tipo que proporciona un objeto (0 o 1).

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

Proporciona acceso a propiedades y métodos expuestos por un objeto .

Se aplica a

Seguridad para subprocesos

Este tipo es seguro para subprocesos.

Consulte también