Почему делают мне нужно “поле”: в моем объявлении атрибута “[field:NonSerialized]”?

Я не могу найти "поле" перечисленным как ключевое слово C# нигде. Кто-либо знает фон на этом?

16
задан skb 7 January 2010 в 17:07
поделиться

4 ответа

Компилятор C# обычно не испытывает проблем с выяснением того, к какой части декларации относится атрибут. Могу привести три случая, в которых его можно использовать:

  1. Атрибуты, которые применяются к ассемблеру. Очень хорошо видно в AssemblyInfo.cs
  2. Атрибут, применяемый к возвращаемому значению декларации P/Invoke, [return:MarshalAs]
  3. Наличие атрибута применяется к переменной бэк-интерфейса свойства или события без аксессуаров. Ваш случай.
6
ответ дан 30 November 2019 в 21:45
поделиться

Это предназначено для того, чтобы позволить вам устанавливать несериализованный атрибут на поля, это полезно при сериализации событий.

Например, это даст вам ошибку компиляции

[NonSerialized]
public event SomeEventHandler SomeEvent;

Чтобы это исправить, вы должны использовать поле:

[field:NonSerialized]
public event SomeEventHandler SomeEvent;

подробнее об этом здесь -- Delegates and Serialization

5
ответ дан 30 November 2019 в 21:45
поделиться

Это необходимо, например, если вы помечаете событие как несериализуемое. В нем указывается цель, к которой применяется атрибут.

Это часть целевого синтаксиса атрибута. Из спецификации :

attribute-target:
    field
    event
    method
    param
    property
    return
    type

См. также документацию для NonSerializedAttribute:

Чтобы применить к событию класс NonSerializedAttribute, установите местоположение атрибута в поле, как показано в следующем C# коде.

[поле:NonSerializedAttribute()]

public event ChangedEventHandler Changed;

13
ответ дан 30 November 2019 в 21:45
поделиться

Неспериализованная атрибутика применима только к полям, ее можно использовать следующим образом:

[NonSerialized]
public string myString;
0
ответ дан 30 November 2019 в 21:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: