Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp Language Specification.doc
Скачиваний:
12
Добавлен:
26.09.2019
Размер:
4.75 Mб
Скачать

17.3Экземпляры атрибутов

Экземпляр атрибута — это экземпляр, представляющий атрибут во время выполнения. Атрибут определяется с помощью класса атрибута, позиционных аргументов и именованных аргументов. Экземпляр атрибута — это экземпляр класса атрибута, который инициализируется с помощью позиционных и именованных аргументов.

Извлечение экземпляра атрибута включает обработку как во время компиляции, так и во время выполнения, как описано в следующих разделах.

17.3.1Компиляция атрибута

Компиляция атрибута с классом атрибута T, списком_позиционных_аргументов P и списком_именованных_аргументов N состоит из следующих шагов:

  • выполнение шагов обработки времени компиляции для компиляции выражения_создания_объекта вида new T(P). Результатом этих шагов является или ошибка времени компиляции, или определение конструктора экземпляров C для T, который может быть вызван во время выполнения;

  • если у C нет общей доступности, возникает ошибка времени компиляции;

  • для каждого именованного_аргумента Arg в N:

  • разрешение Name быть идентификатором именованного_аргумента Arg;

  • Name должен идентифицировать не статическое общее с доступом для чтения и записи поле или свойство в T. Если в T нет такого поля или свойства, возникает ошибка времени компиляции.

  • сохранение следующих сведений для создания экземпляра атрибута во время выполнения: класс атрибута T, конструктор экземпляров C в T, список_позиционных_аргументов P и список_именованных_аргументов N.

17.3.2Извлечение экземпляра атрибута во время выполнения

Компиляция атрибута выдает класс атрибута T, конструктор экземпляров C в T, список_позиционных_аргументов P и список_именованных_аргументов N. Если даны эти сведения, экземпляр атрибута может быть извлечен во время выполнения с помощью следующих шагов:

  • выполнение шагов обработки времени выполнения для выполнения выражения_создания_объекта вида new T(P) с помощью конструктора экземпляров C, как определено во время компиляции. Эти шаги приводят либо к исключению, либо к созданию экземпляра O объекта T;

  • для каждого именованного_аргумента Arg в N в таком порядке:

  • разрешение Name быть идентификатором именованного_аргумента Arg; Если Name не идентифицирует не статическое, общее, с доступом для чтения и записи поле или свойство в O, вызывается исключение;

  • разрешение Value быть результатом вычисления выражения_аргумента_атрибута Arg;

  • если Name идентифицирует поле в O, установить это поле в Value;

  • иначе Name идентифицирует свойство в O. Установить это свойство в Value;

  • результатом является O, экземпляр класса атрибута T, инициализированный с помощью списка_позиционных_аргументов P и списка_именованных_аргументов N.

17.4Зарезервированные атрибуты

Небольшое число атрибутов некоторым образом влияют на язык. К этим атрибутам относятся:

  • System.AttributeUsageAttribute (§17.4.1), используемый для описания способов, которыми можно использовать класс атрибута;

  • System.Diagnostics.ConditionalAttribute (§17.4.2), используемый для определения условных методов;

  • System.ObsoleteAttribute (§17.4.3), используемый для пометки члена как устаревшего.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]