Perché ho bisogno di “campo:” nella mia dichiarazione di attributo “[field: NonSerialized]”?
-
19-09-2019 - |
Domanda
I "campo" classificato come C # parola chiave da nessuna parte, non riesco a trovare. Qualcuno sa lo sfondo su questo?
Soluzione
Il compilatore C # di solito non ha problemi a capire quale parte di una dichiarazione l'attributo 'applicato. Mi vengono in mente tre casi in cui è possibile utilizzare:
- Gli attributi che si applicano al gruppo. Molto visibile in AssemblyInfo.cs
- Un attributo applicato al valore di ritorno di un / dichiarazione Invoke P, [ritorno: MarshalAs]
- Avere l'attributo applicare alla variabile appoggio di una proprietà o evento senza di accesso. Il vostro caso.
Altri suggerimenti
Ciò è necessario, ad esempio, se si sta segnando un evento come non serializzabile. Si specifica il target che l'attributo 'applicato.
E 'parte della sintassi attributo target. Dal :
attribute-target:
field
event
method
param
property
return
type
Si veda anche la documentazione per NonSerializedAttribute
:
Per applicare la classe
NonSerializedAttribute
a un evento, impostare la posizione attributo da campo, come mostrato nel seguente codice C #.
[field:NonSerializedAttribute()]
public event ChangedEventHandler Changed;
Questo è lo scopo di permettere di impostare l'attributo NonSerialized sui campi, questo è utile in serializzare eventi.
Per esempio questo darebbe un errore di compilazione
[NonSerialized]
public event SomeEventHandler SomeEvent;
Per risolvere questo problema è necessario utilizzare field:
[field:NonSerialized]
public event SomeEventHandler SomeEvent;
Maggiori informazioni su questo qui - Delegati e serializzazione
Il NonSerializedAttribute è applicabile solo ai campi, è possibile utilizzarlo come segue:
[NonSerialized]
public string myString;