I can\'t find \"field\" listed as a C# keyword anywhere. Does anyone know the background on this?
The C# compiler usually has no trouble figuring out what part of a declaration the attribute applies to. I can think of three cases where you might use it:
The NonSerializedAttribute is only applicable to fields, you can use it as follows:
[NonSerialized]
public string myString;
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
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;