CustomAttribute Structure

Définition

Fournit des informations sur un attribut personnalisé.

public value class CustomAttribute
public struct CustomAttribute
type CustomAttribute = struct
Public Structure CustomAttribute
Héritage
CustomAttribute

Exemples

Cet exemple montre comment imprimer tous les attributs personnalisés appliqués à la définition de type :

class MyAttribute : Attribute
{
    public int X { get; set; }
}

[My(X = 1)]
class ExampleType1 { }

[My(X = 2)]
class ExampleType2 { }

static void PrintCustomAttributes(MetadataReader mr, TypeDefinition t)
{
    // Enumerate custom attributes on the type definition
    foreach (CustomAttributeHandle attrHandle in t.GetCustomAttributes())
    {
        CustomAttribute attr = mr.GetCustomAttribute(attrHandle);

        // Display the attribute type full name
        if (attr.Constructor.Kind == HandleKind.MethodDefinition)
        {
            MethodDefinition mdef = mr.GetMethodDefinition((MethodDefinitionHandle)attr.Constructor);
            TypeDefinition tdef = mr.GetTypeDefinition(mdef.GetDeclaringType());
            Console.WriteLine($"Type:  {mr.GetString(tdef.Namespace)}.{mr.GetString(tdef.Name)}");
        }
        else if (attr.Constructor.Kind == HandleKind.MemberReference)
        {
            MemberReference mref = mr.GetMemberReference((MemberReferenceHandle)attr.Constructor);

            if (mref.Parent.Kind == HandleKind.TypeReference)
            {
                TypeReference tref = mr.GetTypeReference((TypeReferenceHandle)mref.Parent);
                Console.WriteLine($"Type:  {mr.GetString(tref.Namespace)}.{mr.GetString(tref.Name)}");
            }
            else if (mref.Parent.Kind == HandleKind.TypeDefinition)
            {
                TypeDefinition tdef = mr.GetTypeDefinition((TypeDefinitionHandle)mref.Parent);
                Console.WriteLine($"Type:  {mr.GetString(tdef.Namespace)}.{mr.GetString(tdef.Name)}");
            }
        }

        // Display the attribute value
        byte[] data = mr.GetBlobBytes(attr.Value);
        Console.Write("Value: ");

        for (int i = 0; i < data.Length; i++) Console.Write($"{data[i]:X2} ");

        Console.WriteLine();
    }
}

static void PrintTypesCustomAttributes(MetadataReader mr)
{
    foreach (TypeDefinitionHandle tdh in mr.TypeDefinitions)
    {
        TypeDefinition t = mr.GetTypeDefinition(tdh);
        Console.WriteLine($"{mr.GetString(t.Namespace)}.{mr.GetString(t.Name)}");
        PrintCustomAttributes(mr, t);
    }
}

Remarques

Un attribut personnalisé est une annotation qui associe des informations supplémentaires à un élément de métadonnées, tel qu’un assembly, un type ou une méthode. Vous pouvez utiliser la GetCustomAttribute(CustomAttributeHandle) méthode pour obtenir une instance d’attribut personnalisée. Pour plus d’informations sur les attributs dans .NET, consultez MétadonnéesExtend à l’aide d’attributs.

Propriétés

Nom Description
Constructor

Obtient le constructeur (ou MethodDefinitionHandleMemberReferenceHandle) du type d’attribut personnalisé.

Parent

Obtient le handle de l’entité de métadonnées auquel l’attribut est appliqué.

Value

Obtient la valeur de l’attribut.

S’applique à