ExpC_Module 16ru_1.ppt
- Количество слайдов: 32
Модуль 16 Атрибуты
Обзор модуля В этом модуле вы изучите n Атрибуты n Пользовательские атрибуты n Получение информации атрибутов через механизм Reflection Изучение C#/ Модуль 16/ 2 из 32
Занятие 1 - Введение в атрибуты На первом занятии, Введение в атрибуты, вы изучите: n Определение и описание атрибутов в C#. n Определение использования атрибутов. n Список и описание встроенных атрибутов C#. Изучение C#/ Модуль 16/ 3 из 32
Что такое атрибуты? 1 -2 n n Среда выполнения обычных языков программирования позволяет добавлять похожие на ключевые слова описательные объявления, называемые атрибутами. Атрибуты аннотируют программные элементы, например, типы, поля, методы и свойства. Атрибуты позволяют разместить дополнительную описательную информацию в метаданные. Атрибуты могут содержать имя файла, автора кода, управлять видимостью элементов при разработке форм. Изучение C#/ Модуль 16/ 4 из 32
Что такое атрибуты? 2 -2 n n . NET Framework обеспечивает атрибуты для расширения возможностей языка C#. Атрибуты - это механизм добавления метаданных, например, некоторой декларативной информации о методах, классах, объектах или самой программе. Атрибуты могут быть использованы для передачи важной информации для дизайнеров и разработчиков. Атрибуты могут применяться для различных типов программных элементов. Изучение C#/ Модуль 16/ 5 из 32
Типы атрибутов n n n Атрибут - это объект, представляющий данные, Встроенные атрибуты необходимые для ассоциирования с среды элементом n Встроенные атрибуты - это часть программы, например, классом, они выполнения обычного языка, методом, переменной экземпляра. интегрированы в. NET. Атрибуты хранят метаданные элемента, с которым Пользовательские атрибуты ассоциированы. n Бывают ситуации, когда ни один из встроенных атрибутов. NET Framework не удовлетворяет Атрибуты подразделяются на: требованиям программиста. n Встроенные атрибуты n Пользовательские атрибуты Изучение C#/ Модуль 16/ 6 из 32
Использование атрибутов n Некоторые применения атрибутов: n n Указание, какое свойство должно быть записано в конкретном поле базы данных. Добавление декларативной информации к различным программным элементам, которую можно получить во время выполнения. Определение как информации уровня разработки или URL для документации, так и информации времени выполнения. Описание сериализации данных, спецификации характеристик, используемых для усиления безопасности, ограничения оптимизаций just-in-time компилятора. Изучение C#/ Модуль 16/ 7 из 32
Встроенные (“built-in”) атрибуты n Microsoft Синтаксис . NET Framework обеспечивает набор предопределенных атрибутов, которые могут. . . использоваться в программе на C#. [Attribute. Name(parameters)] Element_Name (parameters) { n The. NET Framework позволяет экстенсивное //Реализация }использование атрибутов для различных задач. . . простого документирования, до расширенной где, поддержки, например, многопоточности и так Element_Name: Имя программного элемента, к которому далее. применяется атрибут. Attribute. Name: это имя атрибута. parameters: Значения, передаваемые атрибуту. n от Существует два типа общих встроенных атрибутов в. NET Framework: n Conditional Изучение C#/ Модуль 16/ 8 из 32 n Dll. Import
Атрибут “Conditional” n Есть несколько ограничений объявления n Используется в целях отладки кода на Пример C#. условного метода. n [Conditional(“DEBUG”)] быть методом в классе или Этот метод должен n Позволяет управлять вызовом метода. public void Get. Name() в { структуре. Console. Write. Line(“Enter Name of void. n Метод должен возвращать тип the Employee: n Преимущество условного (conditional ) атрибута “); _name = Console. Read. Line(); n C# в том, что он применяется на уровне метода, Этот метод может быть отмечен что Console. Write. Line(“Hi {0}. исходного кода. улучшает читаемость но не модификатором virtual, How are you!!”, _name); } static void Main(string[] args) модификатором override. { n Метод, отмеченный условным атрибутом, всегда Console. Write. Line(“Before calling the method n Этот метод не должен быть реализацией должен возвращать void, иначе это приведет к Get. Name()”); метода интерфейса. Get. Name(); ошибке компиляции. . } . . . Изучение C#/ Модуль 16/ 9 из 32
Атрибут “Dll. Import” n DLL Примерэто акроним для Dynamic Link Library (динамически подключаемая библиотека). . class Dll. Import. Test { [Dll. Import(“Calc. dll”)] n Используется для вызова неуправляемого кода в public static extern int Add(int num. One, int num. Two); программе на C#. static void Main(string[] args) { int result; result = Add(7, - это код, разработанный вне n Неуправляемый код 8); Console. Write. Line(“Result = {0}”, result); среды. NET. } }. . . n С помощью этого атрибута неуправляемый код может быть вызван из DLL управляемой средой C#. Изучение C#/ Модуль 16/ 10 из 32
Занятие 2 Пользовательские атрибуты На втором занятии, Пользовательские атрибуты, вы изучите: n Объяснения, как создавать пользовательские атрибуты. n Особенности класса System. Attribute. n Объяснение атрибута Attribute. Usage. Изучение C#/ Модуль 16/ 11 из 32
Пользовательские атрибуты n Могут создаваться в ситуациях, когда встроенные атрибуты не удовлетворяют требованиям Обеспечивают программиста. необходимую информацию об ошибке, исправленной Peter Hamilton 03/05/2007. n В небольших приложениях комментарии добавляются к коду для лучшей интерпретации. Замещает вышеуказанный комментарий с помощью пользовательского атрибута. n Пользовательские атрибуты, как и встроенные это объекты, ассоциированные с одним или несколькими программными элементами. Изучение C#/ Модуль 16/ 12 из 32
Шаги для создания пользовательских атрибутов n n Пользовательские Синтаксис атрибуты могут создаваться определением класса атрибута. public class Attribute. Name: System. Attribute { ……………… } Следующие правила должны соблюдаться перед где, объявлением класса атрибута. Attribute. Name: Имя атрибута: n Класс атрибута должен быть напрямую или Пример ненапрямую наследован от класса. . . System. Attribute. public class Employee : System. Attribute { Класс атрибута должен быть объявлен как public. n. . . public Author(string name) { this. name = name; version = 1. 0; } }. . . Изучение C#/ Модуль 16/ 13 из 32
“System. Attribute” 1 -2 n n n Представляет базовый класс для пользовательских атрибутов. Обеспечивает все необходимые методы для получения пользовательских атрибутов. Класс Attribute ассоциирует системную информацию и пользовательскую информацию с целевым элементом. Изучение C#/ Модуль 16/ 14 из 32
“System. Attribute” 2 -2 n Атрибуты могут применяться к любому целевому Таблица указывает свойства и методы класса System. Attribute. элементу. Свойства/Методы Описание Несколько атрибутов также могут применяться к Свойство получает уникальный одному и тому жеидентификатор для класса Attribute. целевому элементу. n Type. Id Get. Custom. Attribute n Метод возвращает пользовательский атрибут программного элемента. Get. Hash. Code Атрибуты Метод возвращает хэш-код для экземпляра. могут наследоваться элементом, Get. Type Этот метод наследуется от класса Object производным от целевоготип текущего экземпляра. и элемента. возвращает Is. Default. Attribute Этот метод при своем замещении указывает, является ли значение экземпляра значением по умолчанию для производного класса. Изучение C#/ Модуль 16/ 15 из 32
Атрибут “Attribute. Usage” 1 -2 n Он используетсяперечисления сведены в Элементы этого для описания использования класса атрибута. следующую таблицу: Имя элемента Использование All Применяется для любого элемента класса Применяется для определений пользовательских Assembly Применяется для сборки атрибутов с целью управления использованием Class Применяется к классу. нового атрибута. Constructor Применяется к указанному конструктору. n Delegate Применяется к делегату Field. Набор n Применяется к элементов, которые можно всех возможныхполю Interface Применяется для интерфейса разместить в атрибуте, содержится в элементе Method Применяется к методу перечисления Attribute. Targets. Module Применяется к одному модулю. Под модулем понимается переносимый исполняемый файл (portable executable file, . dll или. exe). Property Применяется к свойству Изучение C#/ Модуль 16/ 16 из 32
Атрибут “Attribute. Usage” 2 -2 n n n Управляет использованием пользовательскими Синтаксис атрибутами. [Attribute. Usage(System. Attribute. Targets. <membername>, Содержит значения перечисления Allow. Multiple=true/false, Inherited=true/false)] class New. Attribute : System. Attribute { } System. Attribute. Targets для указания, каким образом использовать пользовательский атрибут. где, Valid. On: Указывает программную сущность, на которую может Attribute. Usage имеет три свойства, которые могут быть помещен атрибут. Allow. Multiple: Указывает, может ли параметров. К устанавливаться путем определенияпользовательский атрибут быть применен к нескольким программным сущностям. ним относятся: Inherited: Указывает, будет ли атрибут наследован классом, производным от класса, на котором размещен атрибут. n Valid. On n Allow. Multiple n Inherited Изучение C#/ Модуль 16/ 17 из 32
Конструирование атрибута с помощью “Attribute. Usage” 1 -3 n n n Классы пользовательских атрибутов должны происходить от System. Attribute. Классы атрибутов могут иметь позиционные параметры и именованые параметры. Конструктор класса атрибута определяет валидную последовательность позиционных параметров для этого класса. Изучение C#/ Модуль 16/ 18 из 32
Конструирование атрибута с помощью “Attribute. Usage” 2 -3 n Позиционные параметры передаются через конструктор и должны передаваться в установленном порядке, определенном в конструкторе. Здесь _employee. ID, _name и _date - позиционные параметры. Изучение C#/ Модуль 16/ 19 из 32
Конструирование атрибута с помощью “Attribute. Usage” 3 -3 n Именованые параметры Разработчик может указать опциональные значения как именованые параметры. comment и Date именованые параметры, определенные как свойства. Изучение C#/ Модуль 16/ 20 из 32
Процесс компиляции полльзовательского атрибута Пример n Компилятор использует следующий процесс для namespace Test. Attribute public string Datedouble Total(double Total) public Employee. ID public int static как применить атрибут: определения, { { { } { [Attribute. Usage(Attribute. Targets. Class | 1. get return Total = 75 + 65; Поиск класса атрибута get Attribute. Targets. Assembly, } { { 2. Проверка области видимости атрибута. Allow. Multiple =static void Main() false)] public true, Inherited = return _date; return _employee. ID; public 3. class Author. Attribute: System. Attribute { } }Проверка конструктора в атрибуте Вывод { } Console. Write. Line(“Average = {0}”, } 4. Создание экземпляра объекта } privatestring Comment Display. Average()); public int _employee. ID; Average = 70 [Author. Attribute(1104, “Paul Nixon”, “ 01/07/07”, private string _name; { 5. }Проверка именованного параметра Comment = “Calculate the Total Age”)] } private string _date; get } public string comment; privateclass Calculate. Average 6. Установка поля или свойства в значение { { public Author. Attribute(int _employee. ID, return comment; именованного параметра string _name, string _date) public static double Display. Average() } { 7. {Сохранение текущего состояния класса атрибута set this. _employee. ID 0; _employee. ID; { double Avg = = this. _name = = value; / 2; return Total(Avg) comment _name; }} this. _date = _date; } } Изучение C#/ Модуль 16/ 21 из 32
Занятие 3 – Получение информации атрибутов через механизм Reflection На последнем занятии, Получение информации атрибутов через механизм Reflection, вы изучите: n Описание механизма отражения (reflection) в. NET. n Описание получения информации атрибутов. Изучение C#/ Модуль 16/ 22 из 32
Определение механизма отражения в. NET 1 -2 n n n Полезно для получения значений атрибутов. Среда выполнения. NET предоставляет механизм, называемый отражением (reflection), позволяющий получение информации, содержащейся в метаданных. . NET Framework обеспечивает пространство имен System. Reflection, содержащее необходимые классы для просмотра информации, содержащейся в метаданных. Изучение C#/ Модуль 16/ 23 из 32
Определение механизма отражения в. NET 2 -2 n Таблица содержит список некоторых классов, представленных в пространстве имен System. Reflection: Класс Описание Member. Info Описывает атрибуты элемента Method. Info Описывает атрибуты метода Field. Info Описывает атрибуты поля Event. Info Описывает атрибуты события Parameter. Info Описывает атрибуты параметра Property. Info Описывает атрибуты свойства Constructor. Info Описывает атрибуты конструктора Assembly. Name Описывает уникальную сущность сборки Изучение C#/ Модуль 16/ 24 из 32
Класс “Member. Info” nn Get. Custom. Attributes если говорить о Наиболее важный класс, получении информации от атрибутов. n Метод возвращает информацию обо всех атрибутах элемента. n Используется для получения информации об атрибутах элемента. n Get. Type n n Этот метод получает метаданным экземпляра. Обеспечивает доступ к тип текущего элемента. n Некоторые важные методы в классе Member. Info: n Get. Custom. Attributes n Get. Type Изучение C#/ Модуль 16/ 25 из 32
Получение информации атрибута n Класс Type Синтаксис - корень классов отражения. System. Type type = typeof(int); n Type инкапсулирует представление типа объекта. Пример Member. Info type. Info = typeof(Calculate. Average); n Console. Write. Line(“Methods: ”); Класс Type - первичный способ доступа к Method. Info[] method. Info = type. Info. Get. Methods(); метаданным. foreach (Method. Info m. Info in method. Info) Console. Write. Line(m. Info. To. String()); Console. Write. Line(“Members: ”); n Member. Info[] member. Info = type. Info. Get. Members(); о Member. Info инкапсулирует информацию foreach (Member. Info m. Info in member. Info) элементах класса - методах, свойствах, полях, Console. Write. Line(m. Info. To. String()); . . . событиях и т. д. Изучение C#/ Модуль 16/ 26 из 32
Извлечение метаданных для класса 1 -4 n Информация пользовательского атрибута может быть извлечена в объектный архив вызовом метода Get. Custom. Attributes(). Изучение C#/ Модуль 16/ 27 из 32
Извлечение метаданных для класса 2 -4 n Объявление атрибутов Атрибуты объявляются для класса Calculate. Average. Класс Author. Attribute объявляет параметры атрибута. Изучение C#/ Модуль 16/ 28 из 32
Извлечение метаданных для класса 3 -4 n Метод Main Этот метод используется для получения информации от атрибута Author. Attribute. Возвращается массив объектов типа Author. Attribute. Объект type. Info типа Member. Info создается для определения атрибутов класса Calculate. Average. Оператор type. Of применении к Calculate. Average возращает объект типа Type. Отображение всех атрибутов, объявленных для класса Calculate. Aver age. Изучение C#/ Модуль 16/ 29 из 32
Извлечение метаданных для класса 4 -4 Вывод Изучение C#/ Модуль 16/ 30 из 32
Резюме 1 -2 n n Атрибуты используются в. NET для добавления метаданных к элементам в программе. n Они описывают важную информацию о различных программных элементах, например, классах, методах, сборках и так далее. Пользовательские атрибуты n Пользовательские атрибуты могут применяться к программным элементам для хранения необходимой информации. n Attribute. Usage применяется для определений пользовательских атрибутов с целью управления использованием нового атрибута. Изучение C#/ Модуль 16/ 31 из 32
Резюме 2 -2 n Информация атрибутов через механизм Reflection n Отражение (Reflection) - технология, с которой информация, хранимая в атрибуте, может быть получена программой при ее выполнении. n Информация атрибута может быть извлечена с помощью метода Get. Custom. Attributes() класса Attribute. Изучение C#/ Модуль 16/ 32 из 32
ExpC_Module 16ru_1.ppt