Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прога - ответы2.docx
Скачиваний:
19
Добавлен:
23.04.2019
Размер:
206.38 Кб
Скачать
  1. Атрибуты в среде .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.