为什么我的属性声明“”中需要“field:”?
我无法在任何地方找到“字段”列为C#关键字。 有谁知道这个背景?
C#编译器通常可以搞清楚该属性适用于哪个声明部分。 我可以想到你可能会使用它的三种情况:
- 适用于程序集的属性。 在AssemblyInfo.cs中非常明显
- 应用于P / Invoke声明的返回值的属性,[return:MarshalAs]
- 将该属性应用于没有访问者的属性或事件的支持变量。 你的情况。
例如,如果要将事件标记为不可序列化,则这是必需的。 它指定属性适用的目标。
它是属性目标语法的一部分。 从规格 :
attribute-target: field event method param property return type
另请参阅NonSerializedAttribute
的文档:
要将
NonSerializedAttribute
类应用于事件,请将属性位置设置为字段,如以下C#代码所示。
[field:NonSerializedAttribute()]
public event ChangedEventHandler Changed;
这是为了允许您在字段上设置NonSerialized属性,这在序列化事件时很有用。
例如,这会给你一个编译错误
[NonSerialized] public event SomeEventHandler SomeEvent;
要解决这个问题,你必须使用field:
[field:NonSerialized] public event SomeEventHandler SomeEvent;
更多相关信息 – 代表和序列化
NonSerializedAttribute仅适用于字段,您可以按如下方式使用它:
[NonSerialized] public string myString;