Атрибуты: различия между версиями
Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Mikst (обсуждение | вклад) Нет описания правки |
Mikst (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
В данном примере иллюстрируется создание пользовательского атрибута, пометка этим атрибутом класса и вывод значения атрибута для нескольких классов (используется механизм рефлексии) | |||
<source lang="Delphi">uses System; | <source lang="Delphi">uses System; | ||
Текущая версия от 12:15, 16 января 2010
В данном примере иллюстрируется создание пользовательского атрибута, пометка этим атрибутом класса и вывод значения атрибута для нескольких классов (используется механизм рефлексии)
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.