Condividi tramite


Attributi personalizzati che generano flag o opzioni nell'output di Intermediate Language (IL)

Questi attributi vengono aggiunti al codice per consentire al compilatore di generare un modificatore di linguaggio intermedio (IL) specificato. Questi attributi indicano al compilatore di includere il modificatore IL corrispondente nell'output.

Attributo Modificatore Commenti
System.Runtime.InteropServices.ComImportAttribute import
System.Runtime.InteropServices.DllImportAttribute pinvokeimpl È possibile aggiungere opzioni elencate nel costruttore.
System.Runtime.InteropServices.FieldOffsetAttribute .field In questo modo viene impostato l'offset del campo per il layout di memoria.
MarshalAsAttribute marshal È possibile impostare le opzioni elencate nel costruttore.
System.Runtime.CompilerServices.MethodImplAttribute flag Gli argomenti del costruttore specificano flag denominati specifici, ad esempio aggressiveinlining o forwardref. Questi flag specificano anche i modificatori native, managedo optil per il 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, sequentialo explicit Le opzioni di layout possono essere impostate usando i parametri .
System.Runtime.CompilerServices.IndexerNameAttribute Questo attributo viene aggiunto a un indicizzatore per impostare un nome di metodo diverso. Per impostazione predefinita, gli indicizzatori vengono compilati in una proprietà denominata Item. È possibile specificare un nome diverso usando questo attributo.

Alcuni di questi attributi personalizzati vengono applicati usando altre sintassi C# anziché aggiungere l'attributo al codice sorgente.

Attributo Commenti
System.Runtime.InteropServices.DefaultParameterValueAttribute Specifica il valore predefinito per il parametro . Usare la sintassi dei parametri predefinita.
System.Runtime.InteropServices.InAttribute Specifica il modificatore IL [in]. Usare i modificatori in o ref readonly.
System.Runtime.InteropServices.OutAttribute Specifica il modificatore IL [out]. Usare il modificatore out.
System.Runtime.CompilerServices.SpecialNameAttribute Specifica il modificatore IL specialname. Il compilatore aggiunge automaticamente questo modificatore per i metodi che lo richiedono.
System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute Questo attributo è obbligatorio per la funzionalità di delegate*. Il compilatore lo aggiunge a qualsiasi delegate* che ne richiede l'uso. Tuttavia, è necessario aggiungere questo attributo a qualsiasi dichiarazione di metodo quando tale metodo viene assegnato a un puntatore a funzione.

Gli attributi seguenti sono in genere non consentiti nell'origine C#. Sono elencati qui per aiutare gli autori di librerie che utilizzano la reflection e per evitare la creazione di attributi personalizzati con lo stesso nome completo.

Attributo Commenti
System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute Impedisce ai compilatori di livello inferiore di usare metadati che non è in grado di comprendere in modo sicuro.
System.Runtime.CompilerServices.DecimalConstantAttribute Codifica i campi const decimal. Il runtime non supporta i valori decimal come valori costanti.
System.Reflection.DefaultMemberAttribute Codifica gli indicizzatori con System.Runtime.CompilerServices.IndexerNameAttribute. Questo attributo annota l'indicizzatore predefinito quando il nome è diverso da Item. Questo attributo è consentito nell'origine.
System.Runtime.CompilerServices.DynamicAttribute Codifica se un tipo in una firma è dynamic (rispetto a object).
System.Runtime.CompilerServices.ExtensionAttribute Questo attributo annota i metodi di estensione. Il compilatore inserisce anche questo attributo nelle classi contenitore.
System.Runtime.CompilerServices.FixedBufferAttribute Questo attributo specifica i campi della struct fixed.
System.Runtime.CompilerServices.IsByRefLikeAttribute Questo attributo specifica uno struct ref.
System.Runtime.CompilerServices.IsReadOnlyAttribute Questo attributo indica che un parametro ha il modificatore in. Distingue i parametri in da readonly ref o [In] ref.
System.Runtime.CompilerServices.RequiresLocationAttribute Questo attributo indica che un parametro ha il modificatore readonly ref. Distingue readonly ref da in o [In] ref.
System.Runtime.CompilerServices.IsUnmanagedAttribute Questo attributo specifica il vincolo unmanaged su un parametro di tipo.
System.Runtime.CompilerServices.NullableAttribute, System.Runtime.CompilerServices.NullableContextAttribute, System.Runtime.CompilerServices.NullablePublicOnlyAttribute Questi attributi codificano annotazioni nullabili nel codice sorgente.
System.ParamArrayAttribute Questo attributo codifica il modificatore params sui parametri della matrice.
System.Runtime.CompilerServices.ParamCollectionAttribute Questo attributo codifica il modificatore params sui parametri non di matrice.
System.Runtime.CompilerServices.RefSafetyRulesAttribute Questo attributo specifica la versione C# necessaria per comprendere le annotazioni di sicurezza di riferimento nell'assembly. Le regole di sicurezza di riferimento si evolvono man mano che C# ottiene nuove funzionalità.
System.Runtime.CompilerServices.RequiredMemberAttribute Questo attributo indica che il modificatore required è stato inserito in una dichiarazione membro. Si tratta della codifica necessaria dei membri della caratteristica del linguaggio.
System.Runtime.CompilerServices.TupleElementNamesAttribute Questo attributo codifica i nomi degli elementi di tupla usati nelle firme.

Inoltre, il compilatore può generare una dichiarazione per altri attributi usati internamente. Il compilatore genera questi attributi nello spazio dei nomi System.Runtime.CompilerServices per il proprio uso. Alcune non si trovano nelle librerie di runtime .NET. Al contrario, il compilatore sintetizza una definizione per una dichiarazione di tipo internal in qualsiasi assembly in cui è necessario l'attributo.