CustomAttribute Structure
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Fournit des informations sur un attribut personnalisé.
public value class CustomAttribute
public struct CustomAttribute
public readonly struct CustomAttribute
type CustomAttribute = struct
Public Structure CustomAttribute
- Héritage
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 un attribut personnalisé instance. Pour plus d’informations sur les attributs dans .NET, consultez Étendre les métadonnées à l’aide d’attributs.
Propriétés
Constructor |
Obtient le constructeur (MethodDefinitionHandle ou MemberReferenceHandle) du type de l'attribut personnalisé. |
Parent |
Obtient le handle de l’entité de métadonnées à laquelle l’attribut est appliqué. |
Value |
Obtient la valeur de l'attribut. |
Méthodes
DecodeValue<TType>(ICustomAttributeTypeProvider<TType>) |
Décode les arguments encodés dans l’objet blob de valeur. |