Partilhar via


Atributos personalizados que geram sinalizadores ou opções na saída IL (Intermediate Language)

Adicione estes atributos ao seu código para que o compilador emita um modificador de Linguagem Intermédia (IL) especificado. Esses atributos instruem o compilador a incluir o modificador IL correspondente na saída.

A referência da linguagem C# documenta a versão mais recentemente lançada da linguagem C#. Contém também documentação inicial para funcionalidades em pré-visualizações públicas para o próximo lançamento linguístico.

A documentação identifica qualquer funcionalidade introduzida pela primeira vez nas últimas três versões da língua ou em pré-visualizações públicas atuais.

Sugestão

Para saber quando uma funcionalidade foi introduzida pela primeira vez em C#, consulte o artigo sobre o histórico de versões da linguagem C#.

Atributo Modificador Observações
System.Runtime.InteropServices.ComImportAttribute import
System.Runtime.InteropServices.DllImportAttribute pinvokeimpl Você pode adicionar opções listadas no construtor.
System.Runtime.InteropServices.FieldOffsetAttribute .field Isso define o offset do campo para o layout da memória.
MarshalAsAttribute marshal Você pode definir opções listadas no construtor.
System.Runtime.CompilerServices.MethodImplAttribute flag Os argumentos do construtor especificam sinalizadores nomeados específicos, como aggressiveinlining ou forwardref. Esses sinalizadores também especificam os modificadores native, managedou optil para o campo 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, sequentialou explicit As opções de layout podem ser definidas usando os parâmetros.
System.Runtime.CompilerServices.IndexerNameAttribute Adicione este atributo a um indexador para definir um nome de método diferente. Por padrão, os indexadores são compilados para uma propriedade chamada Item. Você pode especificar um nome diferente usando esse atributo.

Importante

O [StructLayoutAttribute] não pode ser combinado com o ExtendedLayout atributo.

Alguns destes atributos personalizados são aplicados usando outra sintaxe C# em vez de adicionar o atributo ao seu código-fonte.

Atributo Observações
System.Runtime.InteropServices.DefaultParameterValueAttribute Especifica o valor padrão para o parâmetro. Use a sintaxe do parâmetro padrão .
System.Runtime.InteropServices.InAttribute Especifica o modificador IL [in]. Use os modificadores in ou ref readonly.
System.Runtime.InteropServices.OutAttribute Especifica o modificador IL [out]. Use o modificador out.
System.Runtime.CompilerServices.SpecialNameAttribute Especifica o modificador IL specialname. O compilador adiciona automaticamente esse modificador para métodos que o exigem.
System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute Esse atributo é necessário para o recurso delegate*. O compilador adiciona-o a qualquer delegate* que exija o seu uso. No entanto, você deve adicionar esse atributo a qualquer declaração de método quando esse método é atribuído a um ponteiro de função.

Os atributos a seguir geralmente não são permitidos na fonte C#. Eles estão listados aqui para ajudar os autores da biblioteca que usam reflexão e para garantir que você não crie atributos personalizados com o mesmo nome totalmente qualificado.

Atributo Observações
System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute Impede compiladores de nível inferior de usar metadados que não conseguem compreender em segurança.
System.Runtime.CompilerServices.DecimalConstantAttribute Codifica campos const decimal. O tempo de execução não suporta valores decimal como valores constantes.
System.Reflection.DefaultMemberAttribute Codifica indexadores com System.Runtime.CompilerServices.IndexerNameAttribute. Esse atributo observa o indexador padrão quando seu nome é diferente de Item. Este atributo é permitido na origem.
System.Runtime.CompilerServices.DynamicAttribute Codifica se um tipo em uma assinatura é dynamic (versus object).
System.Runtime.CompilerServices.ExtensionAttribute Este atributo nota métodos de extensão. O compilador também coloca esse atributo nas classes que o contêm.
System.Runtime.CompilerServices.FixedBufferAttribute Este atributo especifica os campos da estrutura fixed.
System.Runtime.CompilerServices.IsByRefLikeAttribute Este atributo especifica um ref struct.
System.Runtime.CompilerServices.IsReadOnlyAttribute Este atributo indica que um parâmetro tem o modificador in. Distingue parâmetros in de readonly ref ou [In] ref.
System.Runtime.CompilerServices.RequiresLocationAttribute Este atributo indica que um parâmetro tem o modificador readonly ref. Distingue readonly ref de in ou [In] ref.
System.Runtime.CompilerServices.IsUnmanagedAttribute Este atributo especifica a restrição de unmanaged em um parâmetro type.
System.Runtime.CompilerServices.NullableAttribute, System.Runtime.CompilerServices.NullableContextAttribute, System.Runtime.CompilerServices.NullablePublicOnlyAttribute Esses atributos codificam anotações anuláveis em seu código-fonte.
System.ParamArrayAttribute Este atributo codifica o modificador params em parâmetros de matriz.
System.Runtime.CompilerServices.ParamCollectionAttribute Este atributo codifica o modificador params em parâmetros que não sejam de matriz.
System.Runtime.CompilerServices.RefSafetyRulesAttribute Este atributo especifica a versão C# necessária para entender as anotações de segurança ref no assembly. As regras de segurança de referência evoluem à medida que o C# recebe novos recursos.
System.Runtime.CompilerServices.RequiredMemberAttribute Esse atributo indica que o modificador de required foi colocado em uma declaração de membro. É a codificação dos membros necessários do recurso de idioma .
System.Runtime.CompilerServices.TupleElementNamesAttribute Este atributo codifica nomes de elementos de tupla usados em assinaturas.

Além disso, o compilador pode gerar uma declaração para outros atributos usados internamente. O compilador gera esses atributos no namespace System.Runtime.CompilerServices para seu próprio uso. Alguns não estão nas bibliotecas do .NET Runtime. Em vez disso, o compilador sintetiza uma definição para uma declaração de tipo internal em qualquer assembly onde o atributo é necessário.