Учебно-методический комплекс общее количество часов 58 ч. Лекции 28 ч
Download 2.46 Mb.
|
Язык программирования C#
- Bu sahifa navigatsiya:
- 18. АТРИБУТЫ 18.1. Понятие атрибута
- 18.2. Применение стандартных атрибутов
17.4. Понятие отражения
Отражение – это средство языка C#, позволяющее получить полную информацию о типах, полях и сборках, динамически создавать объекты, вызывать методы и т.д. Также отражение предоставляет доступ к атрибутам. Отражение, в основном, используется для построения компиляторов, дизассемблеров и прочих средств разработки. Ядром системы отражений является тип System.Type. Всю информацию об изучаемом типе можно получить, обращаясь к полям и методам объекта класса System.Type. Основные классы для поддержки Reflection API расположены в пространстве имен System.Reflection так, что при работе с отражениями обычно приходится его подключить. 18. АТРИБУТЫ 18.1. Понятие атрибута CLR позволяет вам добавлять объявления пользователя, называемые атрибутами, для комментирования таких элементов кода как типы, поля, методы и свойства. Помимо пользовательских атрибутов существуют также стандартные системные атрибуты, позволяющие управлять процессом компиляции и добавлять пользовательским типам особую функциональность. Например, импорт функций из Win32 DLL осуществляется посредством системного атрибута DllImportAttribute. Атрибуты программы хранятся в виде метаданных сборки. Программа может обратиться к метаданным, используя механизм отражений. .NET Framework широко использует атрибуты. Атрибуты описывают правила сериализации данных, управляют безопасностью и ограничивают оптимизацию JIT-компиляторов для облегчения отладки кода. Атрибуты также могут содержать имя файла или автора, или управлять видимостью элементов управления и классов при разработке форм пользовательского интерфейса. Вы можете использовать атрибуты для произвольного комментирования кода и управления поведением компонентов. 18.2. Применение стандартных атрибутов Большинство атрибутов применяется к таким элементам языка как классы, методы, поля и свойства. Но некоторые атрибуты являются глобальными – они воздействуют на всю сборку. Локальные атрибуты помещаются над элементом, к которому мы хотим применить атрибут. Глобальные атрибуты в текстах программ объявляются после using директив верхнего уровня перед определениями типов и пространств имен. Они могут использоваться в разных исходных файлах одной программы. Атрибуты, по сути, являются обычными классами CLR, поэтому для их использования необходимо создать экземпляр класса атрибута и проинициализировать его нужными значениями. Атрибуты создаются компилятором еще во время компиляции, и затем помещаются в метаданные сборки, это делает их доступными CLR и любым инструментальным средствам и приложениям через механизмы рефлексии. Покажем, как применять стандартные атрибуты на локальном и глобальном уровнях. Для этого применим атрибут System.ObsoleteAttribute сначала для класса, а за тем для сборки. Этот встроенный атрибут позволяет пометить некоторый объект как устаревший. Для того чтобы применить атрибут к классу, методу, полю, свойству, структуре, перечислению, интерфейсу и т.д. его имя нужно поместить в квадратные скобки над элементами, которые мы хотим пометить. [System.ObsoleteAttribute("Этот класс устарел и пуст!")] class Program { [System.Obsolete("Метод устаревшего класса!")] static void Main(string[] args) { } } Лист. 9.1 В нашем примере атрибут ObsoleteAttribute используется и для класса Program и для метода Main, только во втором случае слово Attribute опущено, как это позволяют .Net компиляторы от Microsoft и большинства других производителей. После имени атрибута, его конструктору, как и конструктору всех других классов можно передать параметры в круглых скобках. В нашем случае мы передаем строки. Теперь добавим атрибут уровня сборки. Эти атрибуты ставятся в глобальном пространстве имен сборки и для их применения необходимо воспользоваться особым словом assembly. Вы обычно программируете в Visual Studio, которая сама создает и инициализирует информацию о сборке в отдельном файле проекта - AssemblyInfo.cs. using System; using System.Reflection; [assembly: AssemblyDescription("Obsolet assembly!")] namespace UsingObsolete { [System.ObsoleteAttribute("This class id too old to use!")] class Program { [System.ObsoleteAttribute("Don't use this method!")] static void Main(string[] args) { } } } Лист. 9.2 Здесь сразу после подключения нужных пространств имен мы воспользовались атрибутом AssemblyDescriptionAttribute, который расположен в пространстве имен System.Reflection. Теперь если вы откроете вашу сборку в IL DASM, вы можете увидеть информацию, передаваемую атрибутами, поэтому я инициализировал английскими строками, т.к. у IL DASM проблемы с отображением кирилличных букв. Download 2.46 Mb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling