Freigeben über


Angepasste Attribute, die Flags oder Optionen in der Intermediate Language (IL)-Ausgabe generieren

Fügen Sie dem Code diese Attribute hinzu, damit der Compiler einen angegebenen Modifizierer für Zwischensprache (IL) ausgibt. Diese Attribute weisen den Compiler an, den entsprechenden AWL-Modifikator in die Ausgabe aufzunehmen.

Die C#-Sprachreferenz dokumentiert die zuletzt veröffentlichte Version der C#-Sprache. Außerdem enthält sie erste Dokumentation für Features in der öffentlichen Vorschau für die kommende Sprachversion.

In der Dokumentation werden alle Features identifiziert, die in den letzten drei Versionen der Sprache oder in der aktuellen öffentlichen Vorschau eingeführt wurden.

Tipp

Informationen dazu, wann ein Feature erstmals in C# eingeführt wurde, finden Sie im Artikel zum Versionsverlauf der C#-Sprache.

attribute Modifizierer Kommentare
System.Runtime.InteropServices.ComImportAttribute import
System.Runtime.InteropServices.DllImportAttribute pinvokeimpl Sie können die im Konstruktor aufgeführten Optionen hinzufügen.
System.Runtime.InteropServices.FieldOffsetAttribute .field Damit legen Sie den Feld-Offset für das Speicherlayout fest.
MarshalAsAttribute marshal Sie können die im Konstruktor aufgeführten Optionen festlegen.
System.Runtime.CompilerServices.MethodImplAttribute flag Konstruktorargumente geben bestimmte benannte Flags wie aggressiveinlining oder forwardref an. Diese Flags geben die Modifizierer native, managedoder optil auch für das Feld System.Runtime.CompilerServices.MethodCodeType an.
System.NonSerializedAttribute notserialized
System.Runtime.InteropServices.OptionalAttribute [opt]
System.Runtime.InteropServices.PreserveSigAttribute preservesig
System.SerializableAttribute serializable
System.Runtime.InteropServices.StructLayoutAttribute auto, sequential oder explicit Layout-Optionen können über die Parameter festgelegt werden.
System.Runtime.CompilerServices.IndexerNameAttribute Fügen Sie dieses Attribut einem Indexer hinzu, um einen anderen Methodennamen festzulegen. Standardmäßig werden Indexer mit einer Eigenschaft namens Item kompiliert. Sie können mit diesem Attribut einen anderen Namen festlegen.

Von Bedeutung

StructLayoutAttribute[] kann nicht mit dem ExtendedLayout Attribut kombiniert werden.

Einige dieser benutzerdefinierten Attribute werden mithilfe einer anderen C#-Syntax angewendet, anstatt das Attribut dem Quellcode hinzuzufügen.

attribute Kommentare
System.Runtime.InteropServices.DefaultParameterValueAttribute Gibt den Standardwert für den Parameter an. Verwenden Sie die Standardparametersyntax.
System.Runtime.InteropServices.InAttribute Legt den IL [in] Modifikator fest. Verwenden Sie die modifizierer in oder ref readonly.
System.Runtime.InteropServices.OutAttribute Legt den IL [out] Modifikator fest. Verwenden Sie den Modifikator out.
System.Runtime.CompilerServices.SpecialNameAttribute Legt den IL specialname Modifikator fest. Der Compiler fügt diesen Modifikator automatisch für Methoden hinzu, die ihn benötigen.
System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute Dieses Attribut ist für die Funktion delegate* erforderlich. Der Compiler fügt es jedem delegate* hinzu, der seine Verwendung erfordert. Sie müssen dieses Attribut jedoch jeder Methodendeklaration hinzufügen, wenn diese Methode einem Funktionszeiger zugewiesen ist.

Die folgenden Attribute sind in der Regel in der C#-Quelle unzulässig. Sie sind hier aufgeführt, um Bibliotheksautoren zu helfen, die Reflection verwenden, und um sicherzustellen, dass Sie keine angepassten Attribute mit demselben vollqualifizierten Namen erstellen.

attribute Kommentare
System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute Verhindert, dass Compiler mit Downlevel Metadaten verwenden, die sie nicht sicher verstehen können.
System.Runtime.CompilerServices.DecimalConstantAttribute Codiert const decimal-Felder. Die Laufzeitumgebung unterstützt decimal-Werte nicht als konstante Werte.
System.Reflection.DefaultMemberAttribute Kodiert Indexer mit System.Runtime.CompilerServices.IndexerNameAttribute. Dieses Attribut verweist auf den Standard-Indexer, wenn sein Name anders als Item ist. Dieses Attribut ist im Quelltext zugelassen.
System.Runtime.CompilerServices.DynamicAttribute Verschlüsselt, ob ein Typ in einer Signatur dynamic ist (im Gegensatz zu object).
System.Runtime.CompilerServices.ExtensionAttribute Dieses Attribut vermerkt Erweiterungsmethoden. Der Compiler setzt dieses Attribut auch auf die enthaltenden Klassen.
System.Runtime.CompilerServices.FixedBufferAttribute Dieses Attribut spezifiziert fixed-Struct-Felder.
System.Runtime.CompilerServices.IsByRefLikeAttribute Dieses Attribut spezifiziert eine ref-Struct.
System.Runtime.CompilerServices.IsReadOnlyAttribute Dieses Attribut zeigt an, dass ein Parameter den Modifikator in hat. Es unterscheidet in-Parameter von readonly ref oder [In] ref.
System.Runtime.CompilerServices.RequiresLocationAttribute Dieses Attribut zeigt an, dass ein Parameter den Modifikator readonly ref hat. Es unterscheidet readonly ref von in oder [In] ref.
System.Runtime.CompilerServices.IsUnmanagedAttribute Dieses Attribut spezifiziert die unmanaged-Beschränkung für einen Typ-Parameter.
System.Runtime.CompilerServices.NullableAttribute, System.Runtime.CompilerServices.NullableContextAttributeSystem.Runtime.CompilerServices.NullablePublicOnlyAttribute Diese Attribute codieren Nullwerte zulassende Anmerkungen im Quellcode.
System.ParamArrayAttribute Dieses Attribut kodiert den params-Modifikator für Array-Parameter.
System.Runtime.CompilerServices.ParamCollectionAttribute Dieses Attribut kodiert den params-Modifikator für Nicht-Array-Parameter.
System.Runtime.CompilerServices.RefSafetyRulesAttribute Dieses Attribut spezifiziert die C# Version, die erforderlich ist, um ref safety Anmerkungen in der Assembly zu verstehen. Die Regeln zur Sicherheit von Referenzen entwickeln sich weiter, während C# neue Funktionen erhält.
System.Runtime.CompilerServices.RequiredMemberAttribute Dieses Attribut gibt an, dass der required-Modifizierer in einer Memberdeklaration platziert wurde. Dies ist die Codierung der Sprachfunktion der erforderlichen Member.
System.Runtime.CompilerServices.TupleElementNamesAttribute Dieses Attribut kodiert die in Signaturen verwendeten Tupel-Elementnamen.

Darüber hinaus kann der Compiler eine Deklaration für andere intern verwendete Attribute generieren. Der Compiler generiert diese Attribute im System.Runtime.CompilerServices Namespace für die eigene Verwendung. Einige sind nicht in den .NET Runtime-Bibliotheken enthalten. Stattdessen synthetisiert der Compiler eine Definition für eine internal-Typdeklaration in jeder Assembly, in der das Attribut benötigt wird.