Я не могу найти "поле" перечисленным как ключевое слово C# нигде. Кто-либо знает фон на этом?
Компилятор C# обычно не испытывает проблем с выяснением того, к какой части декларации относится атрибут. Могу привести три случая, в которых его можно использовать:
Это предназначено для того, чтобы позволить вам устанавливать несериализованный атрибут на поля, это полезно при сериализации событий.
Например, это даст вам ошибку компиляции
[NonSerialized]
public event SomeEventHandler SomeEvent;
Чтобы это исправить, вы должны использовать поле:
[field:NonSerialized]
public event SomeEventHandler SomeEvent;
подробнее об этом здесь -- Delegates and Serialization
Это необходимо, например, если вы помечаете событие как несериализуемое. В нем указывается цель, к которой применяется атрибут.
Это часть целевого синтаксиса атрибута. Из спецификации :
attribute-target:
field
event
method
param
property
return
type
См. также документацию для NonSerializedAttribute
:
Чтобы применить к событию класс
NonSerializedAttribute
, установите местоположение атрибута в поле, как показано в следующем C# коде.
[поле:NonSerializedAttribute()]
public event ChangedEventHandler Changed;
Неспериализованная атрибутика применима только к полям, ее можно использовать следующим образом:
[NonSerialized]
public string myString;