Учебно-методический комплекс общее количество часов 58 ч. Лекции 28 ч


Download 2.46 Mb.
bet78/91
Sana19.10.2023
Hajmi2.46 Mb.
#1709453
TuriУчебно-методический комплекс
1   ...   74   75   76   77   78   79   80   81   ...   91
Bog'liq
Язык программирования C#

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:
1   ...   74   75   76   77   78   79   80   81   ...   91




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling