Question

Je ne peux pas trouver « champ » répertorié comme un mot-clé C # partout. Est-ce que quelqu'un sait l'arrière-plan sur ce sujet?

Était-ce utile?

La solution

Le compilateur C # a généralement aucune difficulté à déterminer quelle partie d'une déclaration de l'attribut applique. Je peux penser à trois cas où vous pourriez l'utiliser:

  1. Les attributs applicables à l'ensemble. Très visible dans AssemblyInfo.cs
  2. Un attribut appliqué à la valeur de retour d'une déclaration de P / Invoke, [rendement: MarshalAs]
  3. Avoir l'attribut appliquer à la variable de support d'une propriété ou d'un événement sans accesseurs. Votre cas.

Autres conseils

Il est nécessaire, par exemple, si vous marquez un événement comme non sérialisable. Il spécifie la cible que l'attribut applique.

Il fait partie de la syntaxe cible d'attribut. De la :

attribute-target:
    field
    event
    method
    param
    property
    return
    type

Voir aussi la documentation NonSerializedAttribute :

  

Pour appliquer la classe NonSerializedAttribute à un événement, définissez l'emplacement d'attribut au champ, comme indiqué dans le code C # suivant.

     

[field:NonSerializedAttribute()]

     

public event ChangedEventHandler Changed;

Ceci est destiné à vous permettre de définir l'attribut NonSerialized sur les champs, ce qui est utile dans les événements sérialisation.

Par exemple cela vous donne une erreur de compilation

[NonSerialized]
public event SomeEventHandler SomeEvent;

Pour corriger cela, vous devez utiliser field:

[field:NonSerialized]
public event SomeEventHandler SomeEvent;

En savoir plus sur ce ici - délégués et de sérialisation

Le NonSerializedAttribute est uniquement applicable aux champs, vous pouvez l'utiliser comme suit:

[NonSerialized]
public string myString;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top