Настраиваемые атрибуты, которые создают флаги или параметры в выходных данных промежуточного языка (IL)
Вы добавляете эти атрибуты в свой код, чтобы компилятор вывел указанный модификатор промежуточного языка (IL). Эти атрибуты указывают компилятору включить соответствующий модификатор IL в выходные данные.
Атрибут | Модификатор | Комментарии |
---|---|---|
System.Runtime.InteropServices.ComImportAttribute | import |
|
System.Runtime.InteropServices.DllImportAttribute | pinvokeimpl |
Вы можете добавить параметры, перечисленные в конструкторе. |
System.Runtime.InteropServices.FieldOffsetAttribute | .field |
Это задает смещение поля для макета памяти. |
MarshalAsAttribute | marshal |
Параметры, перечисленные в конструкторе, можно задать. |
System.Runtime.CompilerServices.MethodImplAttribute | flag |
Аргументы конструктора указывают определенные именованные флаги, такие как aggressiveinlining или forwardref . Эти флаги также указывают модификаторы native , managed или optil для поля 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 или explicit |
Параметры макета можно задать с помощью настроек. |
System.Runtime.CompilerServices.IndexerNameAttribute | Этот атрибут добавляется в индексатор, чтобы задать другое имя метода. По умолчанию индексаторы компилируются в свойство с именем Item . Можно указать другое имя с помощью этого атрибута. |
Некоторые из этих настраиваемых атрибутов применяются с помощью другого синтаксиса C#, а не добавления атрибута в исходный код.
Атрибут | Комментарии |
---|---|
System.Runtime.InteropServices.DefaultParameterValueAttribute | Задает значение по умолчанию для параметра. Используйте синтаксис параметра по умолчанию. |
System.Runtime.InteropServices.InAttribute | Задает модификатор IL [in] . Используйте модификаторы in или ref readonly . |
System.Runtime.InteropServices.OutAttribute | Задает модификатор IL [out] . Используйте модификатор out . |
System.Runtime.CompilerServices.SpecialNameAttribute | Задает модификатор IL specialname . Компилятор автоматически добавляет этот модификатор для методов, требующих его. |
System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute | Этот атрибут необходим для функции delegate* . Компилятор добавляет его в любой delegate* , где это необходимо. Однако этот атрибут необходимо добавить в любое объявление метода при назначении этого метода указателю функции. |
Следующие атрибуты обычно запрещены в источнике C#. Они перечислены здесь, чтобы помочь авторам библиотек, которые используют механизм отражения, и гарантировать, что вы не создадите пользовательские атрибуты с одинаковым полным квалифицированным именем.
Атрибут | Комментарии |
---|---|
System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute | Запрещает компиляторам нижнего уровня использовать метаданные, которые он не может безопасно понять. |
System.Runtime.CompilerServices.DecimalConstantAttribute | Кодирует поля const decimal . Среда выполнения не поддерживает значения decimal в качестве констант. |
System.Reflection.DefaultMemberAttribute | Кодирует индексаторы с помощью System.Runtime.CompilerServices.IndexerNameAttribute. Этот атрибут отмечает индексатор по умолчанию, если его имя отличается от Item . Этот атрибут разрешен в источнике. |
System.Runtime.CompilerServices.DynamicAttribute | Кодирует, является ли тип в сигнатуре dynamic (в отличие от object ). |
System.Runtime.CompilerServices.ExtensionAttribute | Этот атрибут отмечает методы расширения. Компилятор также помещает этот атрибут в содержащие классы. |
System.Runtime.CompilerServices.FixedBufferAttribute | Этот атрибут определяет поля структуры fixed . |
System.Runtime.CompilerServices.IsByRefLikeAttribute | Этот атрибут задает структуру ref . |
System.Runtime.CompilerServices.IsReadOnlyAttribute | Этот атрибут указывает, что параметр имеет модификатор in . Он отличает параметры in от readonly ref или [In] ref . |
System.Runtime.CompilerServices.RequiresLocationAttribute | Этот атрибут указывает, что параметр имеет модификатор readonly ref . Он отличает readonly ref от in или [In] ref . |
System.Runtime.CompilerServices.IsUnmanagedAttribute | Этот атрибут задает ограничение unmanaged для параметра типа. |
System.Runtime.CompilerServices.NullableAttribute, System.Runtime.CompilerServices.NullableContextAttribute, System.Runtime.CompilerServices.NullablePublicOnlyAttribute | Эти атрибуты кодируют заметки, допускающие значение NULL, в исходном коде. |
System.ParamArrayAttribute | Этот атрибут кодирует модификатор params для параметров массива. |
System.Runtime.CompilerServices.ParamCollectionAttribute | Этот атрибут кодирует модификатор params для параметров, отличных от массива. |
System.Runtime.CompilerServices.RefSafetyRulesAttribute | Этот атрибут указывает версию C#, необходимую для понимания аннотаций безопасности ref в сборке. Правила безопасности ссылок развиваются по мере того, как C# получает новые функции. |
System.Runtime.CompilerServices.RequiredMemberAttribute | Этот атрибут указывает, что модификатор required был помещен в объявление члена. Это кодировка обязательных элементов языка. |
System.Runtime.CompilerServices.TupleElementNamesAttribute | Этот атрибут кодирует имена элементов кортежа, которые используются в сигнатурах. |
Кроме того, компилятор может создать объявление для других атрибутов, используемых внутренне. Компилятор создает эти атрибуты в пространстве имен System.Runtime.CompilerServices для собственного использования. Некоторые из них не в библиотеках среды выполнения .NET. Вместо этого компилятор синтезирует определение для объявления типа internal
в любой сборке, где требуется атрибут.