CustomAttribute Struct

Definitie

Bevat informatie over een aangepast kenmerk.

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

Voorbeelden

In dit voorbeeld ziet u hoe u alle aangepaste kenmerken afdrukt die zijn toegepast op de typedefinitie:

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

Opmerkingen

Een aangepast kenmerk is een aantekening die aanvullende informatie koppelt aan een metagegevenselement, zoals een assembly, type of methode. U kunt de GetCustomAttribute(CustomAttributeHandle) methode gebruiken om een exemplaar van een aangepast kenmerk op te halen. Zie Extend metadata using attributes voor meer informatie over kenmerken in .NET.

Eigenschappen

Name Description
Constructor

Hiermee haalt u de constructor (de MethodDefinitionHandle of MemberReferenceHandle) van het aangepaste kenmerktype op.

Parent

Hiermee haalt u de ingang op van de metagegevensentiteit waar het kenmerk op wordt toegepast.

Value

Hiermee haalt u de waarde van het kenmerk op.

Methoden

Name Description
DecodeValue<TType>(ICustomAttributeTypeProvider<TType>)

Decodeert de argumenten die zijn gecodeerd in de waarde-blob.

Van toepassing op