Partager via


Attributs personnalisés qui génèrent des indicateurs ou des options dans la sortie du langage intermédiaire (IL)

Vous ajoutez ces attributs à votre code pour que le compilateur émette un modificateur de langage intermédiaire spécifié. Ces attributs indiquent au compilateur d’inclure le modificateur IL correspondant dans la sortie.

Attribut Modificateur Commentaires
System.Runtime.InteropServices.ComImportAttribute import
System.Runtime.InteropServices.DllImportAttribute pinvokeimpl Vous pouvez ajouter des options répertoriées dans le constructeur.
System.Runtime.InteropServices.FieldOffsetAttribute .field Cela définit l’offset de champ pour la disposition de la mémoire.
MarshalAsAttribute marshal Vous pouvez définir des options répertoriées dans le constructeur.
System.Runtime.CompilerServices.MethodImplAttribute flag Les arguments de constructeur spécifient des indicateurs nommés spécifiques tels que aggressiveinlining ou forwardref. Ces indicateurs spécifient également les modificateurs native, managed ou optil pour le champ System.Runtime.CompilerServices.MethodCodeType.
System.NonSerializedAttribute notserialized
System.Runtime.InteropServices.OptionalAttribute [opt]
System.Runtime.InteropServices.PreserveSigAttribute preservesig
System.SerializableAttribute serializable
System.Runtime.InteropServices.StructLayoutAttribute auto, sequential ou explicit Les options de disposition peuvent être définies à l’aide des paramètres.
System.Runtime.CompilerServices.IndexerNameAttribute Vous ajoutez cet attribut à un indexeur pour définir un autre nom de méthode. Par défaut, les indexeurs sont compilés sur une propriété nommée Item. Vous pouvez spécifier un autre nom à l’aide de cet attribut.

Certains de ces attributs personnalisés sont appliqués à l’aide d’une autre syntaxe C# plutôt par l’ajout de l’attribut à votre code source.

Attribut Commentaires
System.Runtime.InteropServices.DefaultParameterValueAttribute Spécifie la valeur par défaut du paramètre. Utilisez la syntaxe de paramètre par défaut.
System.Runtime.InteropServices.InAttribute Spécifie le modificateur IL [in]. Utilisez les modificateurs in ou ref readonly.
System.Runtime.InteropServices.OutAttribute Spécifie le modificateur IL [out]. Utilisez le modificateur out.
System.Runtime.CompilerServices.SpecialNameAttribute Spécifie le modificateur IL specialname. Le compilateur ajoute automatiquement ce modificateur pour les méthodes qui en ont besoin.
System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute Cet attribut est requis pour la fonctionnalité delegate*. Le compilateur l’ajoute à n’importe quel delegate* qui requiert son utilisation. Toutefois, vous devez ajouter cet attribut à n’importe quelle déclaration de méthode lorsque cette méthode est affectée à un pointeur de fonction.

Les attributs suivants sont généralement interdits dans la source C#. Ils sont répertoriés ici pour aider les auteurs de bibliothèques qui utilisent la réflexion, et afin de vous assurer que vous ne créez pas d’attributs personnalisés avec le même nom complet.

Attribut Commentaires
System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute Empêche les compilateurs de niveau inférieur d’utiliser les métadonnées qu’ils ne peuvent pas comprendre en toute sécurité.
System.Runtime.CompilerServices.DecimalConstantAttribute Encode des champs const decimal. Le runtime ne prend pas en charge les valeurs decimal comme valeurs constantes.
System.Reflection.DefaultMemberAttribute Encode les indexeurs avec System.Runtime.CompilerServices.IndexerNameAttribute. Cet attribut note l’indexeur par défaut lorsque son nom est autre que Item. Cet attribut est autorisé dans la source.
System.Runtime.CompilerServices.DynamicAttribute Encode si un type dans une signature est dynamic (par rapport à object).
System.Runtime.CompilerServices.ExtensionAttribute Cet attribut note les méthodes d’extension. Le compilateur place également cet attribut sur les classes conteneurs.
System.Runtime.CompilerServices.FixedBufferAttribute Cet attribut spécifie les champs de structure fixed.
System.Runtime.CompilerServices.IsByRefLikeAttribute Cet attribut spécifie une struct ref.
System.Runtime.CompilerServices.IsReadOnlyAttribute Cet attribut indique qu’un paramètre possède le modificateur in. Il distingue les paramètres in de readonly ref ou de [In] ref.
System.Runtime.CompilerServices.RequiresLocationAttribute Cet attribut indique qu’un paramètre possède le modificateur readonly ref. Il distingue readonly ref de in ou de [In] ref.
System.Runtime.CompilerServices.IsUnmanagedAttribute Cet attribut spécifie la contrainte unmanaged sur un paramètre de type.
System.Runtime.CompilerServices.NullableAttribute, System.Runtime.CompilerServices.NullableContextAttribute, System.Runtime.CompilerServices.NullablePublicOnlyAttribute Ces attributs encodent des annotations nullables dans votre code source.
System.ParamArrayAttribute Cet attribut encode le modificateur params sur les paramètres du tableau.
System.Runtime.CompilerServices.ParamCollectionAttribute Cet attribut encode le modificateur params sur les paramètres autres que ceux du tableau.
System.Runtime.CompilerServices.RefSafetyRulesAttribute Cet attribut spécifie la version C# requise pour comprendre les annotations de sécurité ref dans l’assembly. Les règles de sécurité ref évoluent à mesure que C# est doté de nouvelles fonctionnalités.
System.Runtime.CompilerServices.RequiredMemberAttribute Cet attribut indique que le modificateur required a été placé sur une déclaration de membre. Il s’agit de l’encodage de la fonctionnalité de langage membres requis.
System.Runtime.CompilerServices.TupleElementNamesAttribute Cet attribut encode les noms d’éléments de tuple utilisés dans les signatures.

En outre, le compilateur peut générer une déclaration pour d’autres attributs utilisés en interne. Le compilateur génère ces attributs dans l’espace de noms System.Runtime.CompilerServices pour sa propre utilisation. Certains ne se trouvent pas dans les bibliothèques runtime .NET. Au lieu de cela, le compilateur synthétise une définition pour une déclaration de type internal dans n’importe quel assembly où l’attribut est nécessaire.