CustomAttribute Struktur

Definition

Stellt Informationen zu einem benutzerdefinierten Attribut bereit.

public value class CustomAttribute
public struct CustomAttribute
type CustomAttribute = struct
Public Structure CustomAttribute
Vererbung
CustomAttribute

Beispiele

In diesem Beispiel wird gezeigt, wie alle benutzerdefinierten Attribute gedruckt werden, die auf die Typdefinition angewendet werden:

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);
    }
}

Hinweise

Ein benutzerdefiniertes Attribut ist eine Anmerkung, die zusätzliche Informationen einem Metadatenelement zuordnet, z. B. einer Assembly, einem Typ oder einer Methode. Mit der GetCustomAttribute(CustomAttributeHandle) Methode können Sie eine benutzerdefinierte Attributinstanz abrufen. Weitere Informationen zu Attributen in .NET finden Sie unter Extend metadata using attributes.

Eigenschaften

Name Beschreibung
Constructor

Ruft den Konstruktor (oder MethodDefinitionHandleMemberReferenceHandle) des benutzerdefinierten Attributtyps ab.

Parent

Ruft das Handle der Metadatenentität ab, auf die das Attribut angewendet wird.

Value

Ruft den Wert des Attributs ab.

Gilt für: