Warum muss ich „Feld:“ in meinem Attribut-Deklaration „[field: NonSerialized]“?
-
19-09-2019 - |
Frage
Ich kann nicht „Feld“ aufgeführt als C # Schlüsselwort überall finden. Kennt jemand den Hintergrund auf das?
Lösung
Die C # Compiler hat in der Regel keine Probleme, herauszufinden, was Teil einer Erklärung das Attribut bezieht. Ich kann mich drei Fälle, in denen Sie könnten es verwenden:
- Attribute, die für die Montage gelten. Sehr sichtbar in AssemblyInfo.cs
- Ein Attribut auf den Rückgabewert einer P / Invoke Erklärung angewendet, [Rückkehr: MarshalAs]
- Nachdem das Attribut auf die Trägergröße einer Eigenschaft oder ein Ereignis ohne Zugriffsmethoden anzuwenden. Ihr Fall.
Andere Tipps
Dies ist notwendig, zum Beispiel, wenn Sie ein Ereignis als nicht-serializable sind markiert. Es gibt das Ziel, das das Attribut bezieht.
Es ist ein Teil der Attribut Ziel Syntax. Von der Spezifikation :
attribute-target:
field
event
method
param
property
return
type
Siehe auch die Dokumentation für NonSerializedAttribute
:
Um die
NonSerializedAttribute
Klasse auf ein Ereignis gilt, setzen Sie das Attribut Standort Feld, wie in dem folgenden C # -Code gezeigt.
[field:NonSerializedAttribute()]
public event ChangedEventHandler Changed;
Dies soll Sie NonSerialized Attribut auf den Feldern setzen, damit dies ist nützlich bei der Serialisierung von Veranstaltungen.
Zum Beispiel würde dies gibt Ihnen einen Übersetzungsfehler
[NonSerialized]
public event SomeEventHandler SomeEvent;
Um dies zu beheben Sie haben field:
verwenden
[field:NonSerialized]
public event SomeEventHandler SomeEvent;
Mehr zu dieser hier - Delegierten und Serialisierung
Die NonSerializedAttribute gilt nur für Felder, können Sie es wie folgt:
[NonSerialized]
public string myString;