Главная » Delphi » Delphi 2006 – Атрибуты классов

0

В каждой сборке .NET хранится метаинформация о самой этой сборке (пространства имен, структуры используемых классов и прочее). Delphi предоставляет разработчику возможность расширения этой метаинформации, формируемой компилятором (доступ к ней возможен и в процессе работы программы) собственными сведениями: пользовательскими атрибутами классов. Для этого надо объявить такой атрибут способом, схожим с декларацией классов (наследуя свойства класса TCustomAttribute), после чего задействовать его и при необходимости обращаться к нему через стандартные .NET-интерфейсы.

Создадим пользовательский атрибут сборки TMetaAttribute по схеме обычного класса с одним свойством х.

type

TMetaAttribute = class(TCustomAttribute) private

FX : integer;

procedure SetX(x2 : integer); public

constructor Create(const myVal : integer); property X : integer read FX write SetX;

end;

constructor TMetaAttribute.Create(const myVal: integer); begin

inherited Create; FX := myVa1; end;

procedure TMetaAttribute.SetX(x2: integer); begin

FX := x2 end;

Следующий шаг — инструкция компилятору о необходимости включения нового атрибута в сборку. Для этого перед описанием какого-либо класса, который мы хотим снабдить нашим атрибутом, надо указать название атрибута в квадратных скобках, а для самого атрибута — задать значения его свойств, начиная с параметров конструктора. То есть, если мы создаем класс Тх:

type Тх = class end;

и хотим снабдить его дополнительным атрибутом, то перед началом описания Тх надо указать:

[TMetaAttribute(567, X = 12)]

type Тх = class

end;

Отметим, что описание атрибута и связанного с ним класса может быть размещено в интерфейсной части модуля.

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

var

А: Тх;

TS: System.Туре;

AList: array of TObject;

begin

A := Tx.Create;

TS := A.GetType;

Write( TS.FullName ); // FullName – стандартный метод получения полного названия типа

AList := TS.GetCustomAttributes(True); // получили список атрибутов

Далее можно обращаться к любому из элементов списка AList, а тип любого из элементов списка узнается с помощью функции GetType ().

Бобровский С. И. Технологии Delphi 2006. Новые возможности. — СПб.: Питер, 2006. — 288 е.: ил.

По теме:

  • Комментарии