我在任何地方都找不到列为 C# 关键字的“字段”。有谁知道这方面的背景?
问问题
6798 次
4 回答
15
这是必要的,例如,如果您将事件标记为不可序列化。它指定属性应用到的目标。
它是属性目标语法的一部分。从规范:
attribute-target:
field
event
method
param
property
return
type
另请参阅文档NonSerializedAttribute
:
要将
NonSerializedAttribute
类应用于事件,请将属性位置设置为字段,如以下 C# 代码所示。
[field:NonSerializedAttribute()]
public event ChangedEventHandler Changed;
于 2010-01-07T17:02:46.363 回答
8
C# 编译器通常可以毫不费力地确定属性适用于声明的哪一部分。我可以想到您可能会使用它的三种情况:
- 适用于程序集的属性。在 AssemblyInfo.cs 中非常明显
- 应用于 P/Invoke 声明的返回值的属性,[return:MarshalAs]
- 将属性应用于没有访问器的属性或事件的支持变量。你的情况。
于 2010-01-07T18:15:18.147 回答
5
这意味着允许您在字段上设置 NonSerialized 属性,这在序列化事件时很有用。
例如,这会给你一个编译错误
[NonSerialized]
public event SomeEventHandler SomeEvent;
要解决此问题,您必须使用field:
[field:NonSerialized]
public event SomeEventHandler SomeEvent;
更多信息在这里——委托和序列化
于 2010-01-07T17:10:09.263 回答
0
NonSerializedAttribute 只适用于字段,可以如下使用:
[NonSerialized]
public string myString;
于 2010-01-07T17:02:38.703 回答