Предопределенные и собственные атрибуты

Атрибуты в среде.NET и языке C#.

Атрибуты в.NET тесно связаны с понятием рефлексии.

Рефлексия — встроенный в среду.NET механизм, позволяющий во время выполнения получать информацию о наличествующих в сборках метаданных.

Метаданные

Помимо исполняемого кода, в сборке.NET содержатся исчерпывающие и точные метаданные, которые описывают каждый определенный в двоичном файле тип (например, класс, структуру или перечисление), а также всех его членов (например, свойства, методы или события). За генерацию метаданных по типам отвечает компилятор. Из-за того, что метаданные.NET являются настолько детальными, сборки представляют собой полностью самоописываемые (self-describing) сущности.

Для описания типов используется класс System.Type. Способы получения описания типа:

· метод System.Object.GetType(). Требует наличия созданного экземпляра типа:

Point p = new Point();

Type t = p.GetType();

· операция typeof(). Не требует наличия созданного экземпляра, однако тип должен быть известен при компиляции:

Type t = typeof(Point);

· статический метод System.Type.GetType(). Наиболее гибкий. Знать сам тип, из которого извлекаются метаданные, на этапе компиляции не требуется, необходимо указать имя:

Type t = System.Type.GetType(“GeomLib.Ellipse”)

Имея описатель типа, можно получить доступ к его характеристикам, методам, свойствам при помощи свойств/методов класса System.Type, например: IsAbstract, IsArray, IsClass, IsEnum, GetConstructors(), GetEvents(), GetFields(), Getlnterfaces(), GetMembers(), GetMethods() и др.

Понятие атрибутов

Помимо стандартных метаданных, которые помещаются в любую сборку, программисты в.NET могут включать в состав сборки дополнительные метаданные с использованием атрибутов. В сущности, атрибуты представляют собой не более чем просто аннотации, которые могут добавляться в код и применяться к какому-то конкретному типу (классу, интерфейсу, структуре и т.д.), члену (свойству, методу и т.д.), сборке или модулю.

Предопределенные и собственные атрибуты

В.NET доступно множество предопределенных атрибутов, которые полезно применять в своих приложениях. Обработка этих атрибутов уже реализована.

Примеры предопределенных атрибутов:

[Obsolete] Указывает, что данный тип/член является устаревшим. При использовании элемента с этим атрибутом, будет выведено предупреждение компилятора
[Dlllmport] Позволяет обращаться к не-managed библиотекам, в том числе к функциям WinAPI, расположенным в системных DLL.
[Serializable] Позволяет указать, что класс или структура является "сериализируемой", т.е. способна сохранять свое текущее состояние в потоке
[NonSerialized] Позволяет указать, что данное поле в классе или структуре не должно сохраняться в процессе сериализации
[WebMethod] Позволяет указать, что метод может вызываться посредством HTTP-запросов, и CLR-среда должна преобразовывать его возвращаемое значение в формат XML

Также можно создавать собственные атрибуты и тем самым дополнительно уточнять поведение своих типов. Атрибуты представляют собой типы классов, унаследованных от абстрактного базового класса System.Attribute. Для создания собственного атрибута, нужно реализовать новый тип, наследующий от System.Attribute.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: