17

我在任何地方都找不到列为 C# 关键字的“字段”。有谁知道这方面的背景?

4

4 回答 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# 编译器通常可以毫不费力地确定属性适用于声明的哪一部分。我可以想到您可能会使用它的三种情况:

  1. 适用于程序集的属性。在 AssemblyInfo.cs 中非常明显
  2. 应用于 P/Invoke 声明的返回值的属性,[return:MarshalAs]
  3. 将属性应用于没有访问器的属性或事件的支持变量。你的情况。
于 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 回答