Compartilhar via


Atributos personalizados que geram sinalizadores ou opções na saída IL (Linguagem Intermediária)

Adicione esses atributos ao código do compilador para emitir um modificador de IL (Linguagem Intermediária) especificado. Esses atributos instruem o compilador a incluir o modificador IL correspondente na saída.

A linguagem C# faz referência a documentos da versão mais recentemente lançada da linguagem C#. Ele também contém a documentação inicial para recursos em visualizações públicas para a próxima versão do idioma.

A documentação identifica qualquer recurso introduzido pela primeira vez nas três últimas versões do idioma ou nas versões prévias públicas atuais.

Dica

Para descobrir quando um recurso foi introduzido pela primeira vez em C#, consulte o artigo sobre o histórico de versão da linguagem C#.

Atributo Modificador Comentários
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 a diferença de campo no layout de memória.
MarshalAsAttribute marshal Você pode definir as 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, managed ou 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, sequential ou explicit As opções de layout podem ser definidas usando os parâmetros.
System.Runtime.CompilerServices.IndexerNameAttribute Adicione esse 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 desses atributos personalizados são aplicados usando outra sintaxe C# em vez de adicionar o atributo ao código-fonte.

Atributo Comentários
System.Runtime.InteropServices.DefaultParameterValueAttribute Especifica o valor padrão a ser usado para o parâmetro. Use a sintaxe de parâmetro padrão.
System.Runtime.InteropServices.InAttribute Especifica o modificador IL [in]. Use os modificadores de 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 Este atributo é exigido pelo recurso delegate*. O compilador adiciona ele a qualquer delegate* que exija 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 origem C#. Eles são listados aqui para ajudar autores de bibliotecas que usam reflexão e garantir que você não crie atributos personalizados com o mesmo nome totalmente qualificado.

Atributo Comentários
System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute Impede que os compiladores de nível inferior usem metadados que eles não podem entender com segurança.
System.Runtime.CompilerServices.DecimalConstantAttribute Codifica os campos do const decimal. O runtime não dá suporte a 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. Esse atributo é permitido na fonte.
System.Runtime.CompilerServices.DynamicAttribute Codifica se um tipo em uma assinatura é dynamic (versus object).
System.Runtime.CompilerServices.ExtensionAttribute Esse atributo indica métodos de extensão. O compilador também coloca esse atributo nas classes que contêm.
System.Runtime.CompilerServices.FixedBufferAttribute Esse atributo especifica campos da estrutura fixed.
System.Runtime.CompilerServices.IsByRefLikeAttribute Esse atributo especifica um struct ref.
System.Runtime.CompilerServices.IsReadOnlyAttribute Esse atributo indica que um parâmetro tem o modificador in. Ele distingue parâmetros do in de readonly ref ou [In] ref.
System.Runtime.CompilerServices.RequiresLocationAttribute Esse atributo indica que um parâmetro tem o modificador readonly ref. Ele distingue readonly ref de in ou de [In] ref.
System.Runtime.CompilerServices.IsUnmanagedAttribute Esse atributo especifica a restrição unmanaged em um parâmetro de tipo.
System.Runtime.CompilerServices.NullableAttribute, , System.Runtime.CompilerServices.NullableContextAttributeSystem.Runtime.CompilerServices.NullablePublicOnlyAttribute Esses atributos codificam anotações anuláveis no código-fonte.
System.ParamArrayAttribute Esse atributo codifica o modificador params em parâmetros de matriz.
System.Runtime.CompilerServices.ParamCollectionAttribute Esse atributo codifica o modificador params em parâmetros que não são de matriz.
System.Runtime.CompilerServices.RefSafetyRulesAttribute Esse atributo especifica a versão do C# necessária para entender as anotações de segurança de ref no assembly. As regras de segurança de ref evoluem conforme o C# ganha novos recursos.
System.Runtime.CompilerServices.RequiredMemberAttribute Esse atributo indica que o modificador de required foi colocado em uma declaração de membro. Trata-se da codificação dos membros obrigatórios do recurso de linguagem.
System.Runtime.CompilerServices.TupleElementNamesAttribute Esse atributo codifica nomes de elementos de tupla usados nas 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 uso próprio. Algumas não estão nas bibliotecas do Runtime do .NET. Em vez disso, o compilador sintetiza uma definição para uma declaração de tipo internal em qualquer assembly em que o atributo é necessário.