Программирование на Visual C++. Архив рассылки
Шрифт:
Для применения атрибутов на уровне сборок используется ключевое слово Assembly. Следующий пример показывает, как используется атрибут AssemblyNameAttribute:
C#
MC++
Visual Basic.NET
При компиляции кода строка "Моя сборка" помещается в манифест сборки в секции метаданных. Этот атрибут можно увидеть с помощью дизассемблера MSIL (Ildasm.exe) или с помощью пользовательских средств.
Для применения атрибутов на уровне модулей используется ключевое слово Module, в остальном все как на уровне сборок.
Чтобы разрабатывать собственные атрибуты, не нужно изучать что-то принципиально новое. Если вы знакомы с объектно-ориентированным программированием и знаете, как разрабатывать классы, вы знаете уже практически все. Пользовательские атрибуты – это классы, тем или иным образом наследующие от System.Attribute. Также как и все другие классы, пользовательские атрибуты содержат методы для записи и чтения данных. Рассмотрим процесс создания пользовательского атрибута по шагам.
Объявление пользовательского атрибута начинается с AttributeUsageAttribute, который задает ключевые характеристики нового класса. Например, он определяет, может ли атрибут наследоваться другими классами, или к каким элементам он может применяться. Следующий фрагмент кода иллюстрирует применение атрибута AttributeUsageAttribute
C#
MC++
Visual Basic.NET
Класс System.AttributeUsageAttribute содержит три члена, которые важны для создания пользовательских атрибутов: AttributeTargets, Inherited и AllowMultiple.
В предыдущем примере используется флаг AttributeTargets.All. Этот флаг означает, что данный атрибут может применяться к любым элементам
Также можно использовать несколько экземпляров атрибута AttributeTargets. В следующем примере показано, как пользовательский атрибут может применяться к любому классу или методу:
C#
MC++
Visual Basic.NET
Это свойство определяет, будет ли атрибут наследоваться классами, наследниками того, к которому этот атрибут применен. Это свойство может принимать два значения: true или false.
C#
MC++
Visual Basic.NET
Вышеописанные атрибуты затем применяются к методу класса MyClass:
C#