Partage via


Attribute Classe

Définition

Représente la classe de base pour les attributs personnalisés.

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
Héritage
Attribute
Dérivé
Attributs
Implémente

Exemples

L’exemple de code suivant illustre l’utilisation 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.

Remarques

La classe Attribute associe des informations système prédéfinies ou des informations personnalisées définies par l’utilisateur à un élément cible. Un élément cible peut être un assembly, une classe, un constructeur, un délégué, enum, un événement, un champ, une interface, une méthode, un module de fichier exécutable portable, un paramètre, une propriété, une valeur de retour, un struct ou un autre attribut.

Les informations fournies par un attribut sont également appelées métadonnées. Les métadonnées peuvent être examinées au moment de l’exécution par votre application pour contrôler la façon dont votre programme traite les données ou avant l’exécution par des outils externes pour contrôler la façon dont votre application elle-même est traitée ou gérée. Par exemple, .NET prédéfinit et utilise des types d’attributs pour contrôler le comportement d’exécution, et certains langages de programmation utilisent des types d’attributs pour représenter les fonctionnalités de langage non directement prises en charge par le système de type commun .NET.

Tous les types d’attributs dérivent directement ou indirectement de la classe Attribute. Les attributs peuvent être appliqués à n’importe quel élément cible ; plusieurs attributs peuvent être appliqués au même élément cible ; et les attributs peuvent être hérités par un élément dérivé d’un élément cible. Utilisez la classe AttributeTargets pour spécifier l’élément cible auquel l’attribut est appliqué.

La classe Attribute fournit des méthodes pratiques pour récupérer et tester des attributs personnalisés. Pour plus d’informations sur l’utilisation d’attributs, consultez Application des attributs et attributs.

Constructeurs

Attribute()

Initialise une nouvelle instance de la classe Attribute.

Propriétés

TypeId

En cas d’implémentation dans une classe dérivée, obtient un identificateur unique pour cette Attribute.

Méthodes

Equals(Object)

Retourne une valeur qui indique si cette instance est égale à un objet spécifié.

GetCustomAttribute(Assembly, Type)

Récupère un attribut personnalisé appliqué à un assembly spécifié. Les paramètres spécifient l’assembly et le type de l’attribut personnalisé à rechercher.

GetCustomAttribute(Assembly, Type, Boolean)

Récupère un attribut personnalisé appliqué à un assembly. Les paramètres spécifient l’assembly, le type de l’attribut personnalisé à rechercher et une option de recherche ignorée.

GetCustomAttribute(MemberInfo, Type)

Récupère un attribut personnalisé appliqué à un membre d’un type. Les paramètres spécifient le membre et le type de l’attribut personnalisé à rechercher.

GetCustomAttribute(MemberInfo, Type, Boolean)

Récupère un attribut personnalisé appliqué à un membre d’un type. Les paramètres spécifient le membre, le type de l’attribut personnalisé à rechercher et s’il faut rechercher des ancêtres du membre.

GetCustomAttribute(Module, Type)

Récupère un attribut personnalisé appliqué à un module. Les paramètres spécifient le module et le type de l’attribut personnalisé à rechercher.

GetCustomAttribute(Module, Type, Boolean)

Récupère un attribut personnalisé appliqué à un module. Les paramètres spécifient le module, le type de l’attribut personnalisé à rechercher et une option de recherche ignorée.

GetCustomAttribute(ParameterInfo, Type)

Récupère un attribut personnalisé appliqué à un paramètre de méthode. Les paramètres spécifient le paramètre de méthode et le type de l’attribut personnalisé à rechercher.

GetCustomAttribute(ParameterInfo, Type, Boolean)

Récupère un attribut personnalisé appliqué à un paramètre de méthode. Les paramètres spécifient le paramètre de méthode, le type de l’attribut personnalisé à rechercher et s’il faut rechercher des ancêtres du paramètre de méthode.

GetCustomAttributes(Assembly)

Récupère un tableau des attributs personnalisés appliqués à un assembly. Un paramètre spécifie l’assembly.

GetCustomAttributes(Assembly, Boolean)

Récupère un tableau des attributs personnalisés appliqués à un assembly. Les paramètres spécifient l’assembly et une option de recherche ignorée.

GetCustomAttributes(Assembly, Type)

Récupère un tableau des attributs personnalisés appliqués à un assembly. Les paramètres spécifient l’assembly et le type de l’attribut personnalisé à rechercher.

GetCustomAttributes(Assembly, Type, Boolean)

Récupère un tableau des attributs personnalisés appliqués à un assembly. Les paramètres spécifient l’assembly, le type de l’attribut personnalisé à rechercher et une option de recherche ignorée.

GetCustomAttributes(MemberInfo)

Récupère un tableau des attributs personnalisés appliqués à un membre d’un type. Un paramètre spécifie le membre.

GetCustomAttributes(MemberInfo, Boolean)

Récupère un tableau des attributs personnalisés appliqués à un membre d’un type. Les paramètres spécifient le membre, le type de l’attribut personnalisé à rechercher et s’il faut rechercher des ancêtres du membre.

GetCustomAttributes(MemberInfo, Type)

Récupère un tableau des attributs personnalisés appliqués à un membre d’un type. Les paramètres spécifient le membre et le type de l’attribut personnalisé à rechercher.

GetCustomAttributes(MemberInfo, Type, Boolean)

Récupère un tableau des attributs personnalisés appliqués à un membre d’un type. Les paramètres spécifient le membre, le type de l’attribut personnalisé à rechercher et s’il faut rechercher des ancêtres du membre.

GetCustomAttributes(Module)

Récupère un tableau des attributs personnalisés appliqués à un module. Un paramètre spécifie le module.

GetCustomAttributes(Module, Boolean)

Récupère un tableau des attributs personnalisés appliqués à un module. Les paramètres spécifient le module et une option de recherche ignorée.

GetCustomAttributes(Module, Type)

Récupère un tableau des attributs personnalisés appliqués à un module. Les paramètres spécifient le module et le type de l’attribut personnalisé à rechercher.

GetCustomAttributes(Module, Type, Boolean)

Récupère un tableau des attributs personnalisés appliqués à un module. Les paramètres spécifient le module, le type de l’attribut personnalisé à rechercher et une option de recherche ignorée.

GetCustomAttributes(ParameterInfo)

Récupère un tableau des attributs personnalisés appliqués à un paramètre de méthode. Un paramètre spécifie le paramètre de méthode.

GetCustomAttributes(ParameterInfo, Boolean)

Récupère un tableau des attributs personnalisés appliqués à un paramètre de méthode. Les paramètres spécifient le paramètre de méthode et indiquent s’il faut rechercher les ancêtres du paramètre de méthode.

GetCustomAttributes(ParameterInfo, Type)

Récupère un tableau des attributs personnalisés appliqués à un paramètre de méthode. Les paramètres spécifient le paramètre de méthode et le type de l’attribut personnalisé à rechercher.

GetCustomAttributes(ParameterInfo, Type, Boolean)

Récupère un tableau des attributs personnalisés appliqués à un paramètre de méthode. Les paramètres spécifient le paramètre de méthode, le type de l’attribut personnalisé à rechercher et s’il faut rechercher des ancêtres du paramètre de méthode.

GetHashCode()

Retourne le code de hachage pour cette instance.

GetType()

Obtient la Type de l’instance actuelle.

(Hérité de Object)
IsDefaultAttribute()

En cas de substitution dans une classe dérivée, indique si la valeur de cette instance est la valeur par défaut de la classe dérivée.

IsDefined(Assembly, Type)

Détermine si des attributs personnalisés sont appliqués à un assembly. Les paramètres spécifient l’assembly et le type de l’attribut personnalisé à rechercher.

IsDefined(Assembly, Type, Boolean)

Détermine si des attributs personnalisés sont appliqués à un assembly. Les paramètres spécifient l’assembly, le type de l’attribut personnalisé à rechercher et une option de recherche ignorée.

IsDefined(MemberInfo, Type)

Détermine si des attributs personnalisés sont appliqués à un membre d’un type. Les paramètres spécifient le membre et le type de l’attribut personnalisé à rechercher.

IsDefined(MemberInfo, Type, Boolean)

Détermine si des attributs personnalisés sont appliqués à un membre d’un type. Les paramètres spécifient le membre, le type de l’attribut personnalisé à rechercher et s’il faut rechercher des ancêtres du membre.

IsDefined(Module, Type)

Détermine si des attributs personnalisés d’un type spécifié sont appliqués à un module. Les paramètres spécifient le module et le type de l’attribut personnalisé à rechercher.

IsDefined(Module, Type, Boolean)

Détermine si des attributs personnalisés sont appliqués à un module. Les paramètres spécifient le module, le type de l’attribut personnalisé à rechercher et une option de recherche ignorée.

IsDefined(ParameterInfo, Type)

Détermine si des attributs personnalisés sont appliqués à un paramètre de méthode. Les paramètres spécifient le paramètre de méthode et le type de l’attribut personnalisé à rechercher.

IsDefined(ParameterInfo, Type, Boolean)

Détermine si des attributs personnalisés sont appliqués à un paramètre de méthode. Les paramètres spécifient le paramètre de méthode, le type de l’attribut personnalisé à rechercher et s’il faut rechercher des ancêtres du paramètre de méthode.

Match(Object)

En cas de substitution dans une classe dérivée, retourne une valeur qui indique si cette instance est égale à un objet spécifié.

MemberwiseClone()

Crée une copie superficielle du Objectactuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l’objet actuel.

(Hérité de Object)

Implémentations d’interfaces explicites

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

Mappe un ensemble de noms à un ensemble correspondant d’identificateurs de répartition.

_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Récupère les informations de type d’un objet, qui peuvent être utilisées pour obtenir les informations de type d’une interface.

_Attribute.GetTypeInfoCount(UInt32)

Récupère le nombre d’interfaces d’informations de type fournies par un objet (0 ou 1).

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

Fournit l’accès aux propriétés et méthodes exposées par un objet.

S’applique à

Cohérence de thread

Ce type est thread safe.

Voir aussi