C#中[field:NonSerialized]和[NonSerialized]之间的区别

时间:2010-12-15 14:15:54

标签: c# attributes

之间有什么区别
[field: NonSerialized]
public event EventHandler<SelectedPageChangeEventArgs> SelectedPageChanged;

[NonSerialized]
public event EventHandler<SelectedPageChangeEventArgs> SelectedPageChanged;

3 个答案:

答案 0 :(得分:1)

field:前缀用于在字段上应用属性,就像方法一样使用method:

在您给定的代码中,只有第一个编译而另一个(没有field:前缀)不会。

您需要添加field:前缀NonSerialized属性的原因是因为它仅限于在字段中使用:

[来自元数据]

[AttributeUsage(AttributeTargets.Field, Inherited = false)]
[ComVisible(true)]
public sealed class NonSerializedAttribute : Attribute
{        
    public NonSerializedAttribute();
}

答案 1 :(得分:1)

一个标记事件,另一个标记具有属性的支持字段。

Attribute Targets

  

在省略事件访问器声明的事件声明上指定的属性可以应用于正在声明的事件,关联字段(如果事件不是抽象),或者应用于关联的添加和删除方法。在缺少attribute-target-specifier的情况下,该属性适用于事件声明。属性目标等于event表示该属性适用于该事件;属性目标等于字段表示该属性适用于该字段;并且属性目标等于方法表示该属性适用于方法。

http://en.csharp-online.net/ECMA-334:_24.2_Attribute_specification

答案 2 :(得分:1)

在您的特定情况下,没有区别。您正在进入attribute targets的主题。在某些存在歧义的情况下,目标会发挥作用。该链接很好地解释了这一点。