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 , managed o 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 , sequential o 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.