CustomAttribute Struktur
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt Informationen zu einem benutzerdefinierten Attribut bereit.
public value class CustomAttribute
public struct CustomAttribute
public readonly struct CustomAttribute
type CustomAttribute = struct
Public Structure CustomAttribute
- Vererbung
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 einem Metadatenelement, z. B. einer Assembly, einem Typ oder einer Methode, zusätzliche Informationen zuordnet. Sie können die GetCustomAttribute(CustomAttributeHandle) -Methode verwenden, um ein benutzerdefiniertes Attribut instance abzurufen. Weitere Informationen zu Attributen in .NET finden Sie unter Erweitern von Metadaten mithilfe von Attributen.
Eigenschaften
Constructor |
Ruft den Konstruktor (MethodDefinitionHandle oder MemberReferenceHandle) des benutzerdefinierten Attributtyps ab. |
Parent |
Ruft das Handle für die Metadatenentität ab, auf die das Attribut angewendet wird. |
Value |
Ruft den Wert des Attributs ab. |
Methoden
DecodeValue<TType>(ICustomAttributeTypeProvider<TType>) |
Decodiert die Argumente, die im Wertblob codiert sind. |