Поделиться через


Настраиваемые атрибуты, которые создают флаги или параметры в выходных данных промежуточного языка (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 в любой сборке, где требуется атрибут.