CustomAttribute Struktura

Definicja

Zawiera informacje o atrybucie niestandardowym.

public value class CustomAttribute
public struct CustomAttribute
public readonly struct CustomAttribute
type CustomAttribute = struct
Public Structure CustomAttribute
Dziedziczenie
CustomAttribute

Przykłady

W tym przykładzie pokazano, jak wydrukować wszystkie atrybuty niestandardowe zastosowane do definicji typu:

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

Uwagi

Atrybut niestandardowy to adnotacja, która kojarzy dodatkowe informacje z elementem metadanych, takim jak zestaw, typ lub metoda. Możesz użyć GetCustomAttribute(CustomAttributeHandle) metody , aby uzyskać wystąpienie atrybutu niestandardowego. Aby uzyskać więcej informacji na temat atrybutów na platformie .NET, zobacz Rozszerzanie metadanych przy użyciu atrybutów.

Właściwości

Constructor

Pobiera konstruktor (lub MethodDefinitionHandleMemberReferenceHandle) typu atrybutu niestandardowego.

Parent

Pobiera uchwyt jednostki metadanych, do których jest stosowany atrybut.

Value

Pobiera wartość atrybutu.

Metody

DecodeValue<TType>(ICustomAttributeTypeProvider<TType>)

Dekoduje argumenty zakodowane w obiekcie blob wartości.

Dotyczy