Perché ho bisogno di “campo:” nella mia dichiarazione di attributo “[field: NonSerialized]”?

StackOverflow https://stackoverflow.com/questions/2022035

Domanda

I "campo" classificato come C # parola chiave da nessuna parte, non riesco a trovare. Qualcuno sa lo sfondo su questo?

È stato utile?

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:

  1. Gli attributi che si applicano al gruppo. Molto visibile in AssemblyInfo.cs
  2. Un attributo applicato al valore di ritorno di un / dichiarazione Invoke P, [ritorno: MarshalAs]
  3. 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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top