C# C中[field:NonSerialized]和[NonSerialized]之间的差异#

C# C中[field:NonSerialized]和[NonSerialized]之间的差异#,c#,attributes,C#,Attributes,两者的区别是什么 [field: NonSerialized] public event EventHandler<SelectedPageChangeEventArgs> SelectedPageChanged; [字段:非序列化] 公共事件处理程序SelectedPageChanged; 及 [非串行化] 公共事件处理程序SelectedPageChanged; 字段:前缀用于在字段上应用属性,就像方法:用于方法一样 在给定的代码中,只有第一个会编译,而另一个(不带字段:前缀

两者的区别是什么

[field: NonSerialized]
public event EventHandler<SelectedPageChangeEventArgs> SelectedPageChanged;
[字段:非序列化]
公共事件处理程序SelectedPageChanged;

[非串行化]
公共事件处理程序SelectedPageChanged;

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

在给定的代码中,只有第一个会编译,而另一个(不带
字段:
前缀)不会编译

需要使用
非序列化属性添加
字段:
前缀的原因是,它仅限于在字段上使用:

[来自元数据]
一个标记事件,另一个使用属性标记支持字段

在事件声明中指定的省略事件访问器声明的属性可以应用于所声明的事件、关联的字段(如果事件不是抽象的)或关联的add和remove方法。如果没有属性目标说明符,则该属性将应用于事件声明。等于事件的属性目标表示该属性应用于事件;属性目标等于字段表示该属性应用于该字段;属性目标等于method表示该属性应用于这些方法


在您的特殊情况下,没有区别。你正在进入一个新的话题。在某些模棱两可的情况下,目标将发挥作用。链接很好地解释了这一点

[NonSerialized]
public event EventHandler<SelectedPageChangeEventArgs> SelectedPageChanged;
[AttributeUsage(AttributeTargets.Field, Inherited = false)]
[ComVisible(true)]
public sealed class NonSerializedAttribute : Attribute
{        
    public NonSerializedAttribute();
}