I can't find "field" listed as a C# keyword anywhere. Does anyone know the background on this?
views:
235answers:
4The NonSerializedAttribute is only applicable to fields, you can use it as follows:
[NonSerialized]
public string myString;
This is necessary, for example, if you are marking an event as non-serializable. It specifies the target that the attribute applies to.
It is part of the attribute target syntax. From the specification:
attribute-target:
field
event
method
param
property
return
type
See also the documentation for NonSerializedAttribute
:
To apply the
NonSerializedAttribute
class to an event, set the attribute location to field, as shown in the following C# code.
[field:NonSerializedAttribute()]
public event ChangedEventHandler Changed;
This is meant to allow you to set NonSerialized attribute on fields, this is useful in serializing events.
For instance this would give you a compilation error
[NonSerialized]
public event SomeEventHandler SomeEvent;
To fix this you have to use field:
[field:NonSerialized]
public event SomeEventHandler SomeEvent;
More on this here -- Delegates and Serialization
The C# compiler usually has no trouble figuring out what part of a declaration the attribute applies to. Field should never be an issue. I can think of two cases where you always have to use it:
- Attributes that apply to the assembly. Very visible in AssemblyInfo.cs
- An attribute applied to the return value of a P/Invoke declaration, [return:MarshalAs]