Atrybuty niestandardowe, które generują flagi lub opcje w danych wyjściowych języka pośredniego (IL)
Dodajesz te atrybuty do swojego kodu, aby kompilator mógł emitować określony modyfikator języka pośredniego (IL). Te atrybuty instruują kompilator, aby uwzględnił odpowiedni modyfikator IL w danych wyjściowych.
Atrybut | Modyfikator | Komentarze |
---|---|---|
System.Runtime.InteropServices.ComImportAttribute | import |
|
System.Runtime.InteropServices.DllImportAttribute | pinvokeimpl |
Możesz dodać opcje wymienione w konstruktorze. |
System.Runtime.InteropServices.FieldOffsetAttribute | .field |
Ustawia przesunięcie pola w układzie pamięci. |
MarshalAsAttribute | marshal |
Można ustawić opcje wymienione w konstruktorze. |
System.Runtime.CompilerServices.MethodImplAttribute | flag |
Argumenty konstruktora określają określone nazwane flagi, takie jak aggressiveinlining lub forwardref . Te flagi określają również modyfikatory native , managed lub optil dla pola 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 lub explicit |
Opcje układu można ustawić przy użyciu parametrów. |
System.Runtime.CompilerServices.IndexerNameAttribute | Ten atrybut należy dodać do indeksatora, aby ustawić inną nazwę metody. Domyślnie indeksatory są kompilowane do właściwości o nazwie Item . Możesz określić inną nazwę przy użyciu tego atrybutu. |
Niektóre z tych atrybutów niestandardowych są stosowane przy użyciu innej składni języka C#, a nie dodawania atrybutu do kodu źródłowego.
Atrybut | Komentarze |
---|---|
System.Runtime.InteropServices.DefaultParameterValueAttribute | Określa wartość domyślną parametru. Użyj domyślnej składni parametru . |
System.Runtime.InteropServices.InAttribute | Określa modyfikator IL [in] . Użyj modyfikatorów in lub ref readonly . |
System.Runtime.InteropServices.OutAttribute | Określa modyfikator IL [out] . Użyj modyfikatora out . |
System.Runtime.CompilerServices.SpecialNameAttribute | Określa modyfikator IL specialname . Kompilator automatycznie dodaje ten modyfikator dla metod, które tego wymagają. |
System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute | Ten atrybut jest wymagany dla funkcji delegate* . Kompilator dodaje go do wszystkich delegate* , które wymagają jego użycia. Należy jednak dodać ten atrybut do dowolnej deklaracji metody, gdy ta metoda jest przypisana do wskaźnika funkcji. |
Następujące atrybuty są zwykle niedozwolone w źródle języka C#. Są one wymienione tutaj, aby pomóc autorom bibliotek, którzy używają refleksji, i abyś nie tworzył atrybutów niestandardowych o tej samej całkowicie kwalifikowanej nazwie.
Atrybut | Komentarze |
---|---|
System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute | Uniemożliwia starszym kompilatorom korzystanie z metadanych, których nie potrafią bezpiecznie zrozumieć. |
System.Runtime.CompilerServices.DecimalConstantAttribute | Koduje pola const decimal . Środowisko uruchomieniowe nie obsługuje wartości decimal jako wartości stałych. |
System.Reflection.DefaultMemberAttribute | Koduje indeksatory za pomocą System.Runtime.CompilerServices.IndexerNameAttribute. Ten atrybut zwraca uwagę na domyślny indeksator, gdy jego nazwa różni się od Item . Ten atrybut jest dozwolony w źródle. |
System.Runtime.CompilerServices.DynamicAttribute | Koduje, czy typ w podpisie jest dynamic (a nie object ). |
System.Runtime.CompilerServices.ExtensionAttribute | Ten atrybut notuje metody rozszerzeń. Kompilator umieszcza również ten atrybut w klasach zawierających. |
System.Runtime.CompilerServices.FixedBufferAttribute | Ten atrybut określa pola struktury fixed . |
System.Runtime.CompilerServices.IsByRefLikeAttribute | Ten atrybut określa strukturę ref . |
System.Runtime.CompilerServices.IsReadOnlyAttribute | Ten atrybut wskazuje, że parametr ma modyfikator in . Odróżnia on parametry in od parametrów readonly ref lub [In] ref . |
System.Runtime.CompilerServices.RequiresLocationAttribute | Ten atrybut wskazuje, że parametr ma modyfikator readonly ref . Odróżnia readonly ref od in lub [In] ref . |
System.Runtime.CompilerServices.IsUnmanagedAttribute | Ten atrybut określa ograniczenie unmanaged dla parametru typu. |
System.Runtime.CompilerServices.NullableAttribute, System.Runtime.CompilerServices.NullableContextAttribute, System.Runtime.CompilerServices.NullablePublicOnlyAttribute | Te atrybuty zawierają adnotacje nullowalności w twoim kodzie źródłowym. |
System.ParamArrayAttribute | Ten atrybut koduje modyfikator params parametrów tablicy. |
System.Runtime.CompilerServices.ParamCollectionAttribute | Ten atrybut koduje modyfikator params w parametrach innych niż tablica. |
System.Runtime.CompilerServices.RefSafetyRulesAttribute | Ten atrybut określa wersję języka C#, która jest wymagana w celu zrozumienia adnotacji bezpieczeństwa ref w zestawie. Reguły bezpieczeństwa ref ewoluują, gdy język C# otrzymuje nowe funkcje. |
System.Runtime.CompilerServices.RequiredMemberAttribute | Ten atrybut wskazuje, że modyfikator required został umieszczony w deklaracji członka. Jest to kodowanie wymaganych elementów członkowskich funkcji języka. |
System.Runtime.CompilerServices.TupleElementNamesAttribute | Ten atrybut koduje nazwy elementów w krotkach używane w sygnaturach. |
Ponadto kompilator może wygenerować deklarację dla innych atrybutów używanych wewnętrznie. Kompilator generuje te atrybuty w przestrzeni nazw System.Runtime.CompilerServices do użytku własnego. Niektóre z nich nie są w bibliotekach środowiska uruchomieniowego platformy .NET. Zamiast tego kompilator syntetyzuje definicję deklaracji typu internal
w dowolnym zestawie, w którym jest wymagany atrybut.