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.