Атрибуты
Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
В данном примере иллюстрируется создание пользовательского атрибута, пометка этим атрибутом класса и вывод значения атрибута для нескольких классов (используется механизм рефлексии)
uses System;
type
Author = class(Attribute) // определение класса атрибута
private
_name: string;
public
constructor (name: string);
begin
_name := name;
end;
property Name: string read _name;
end;
[Author('Иванов И.И.')] // пометка класса атрибутом
MyClass=class
procedure Print();
begin
write('MyClass');
end;
end;
[Author('Петров П.П.')]
MyClass1=class
procedure Print();
begin
write('MyClass1');
end;
end;
// Вывод информации об авторе для данного типа. Используется механизм рефлексии
procedure PrintAuthorInfo(t: System.Type);
begin
write('Информация об авторе для типа ', t.Name,': ');
var attrs: array of Attribute := Attribute.GetCustomAttributes(t); // получение атрибутов с помощью рефлексии
foreach attr: Attribute in attrs do
if attr is Author then
begin
var a := Author(attr);
writeln(a.Name);
end;
end;
begin
PrintAuthorInfo(typeof(MyClass));
PrintAuthorInfo(typeof(MyClass1));
PrintAuthorInfo(typeof(integer));
end.