Атрибуты: различия между версиями
Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Mikst (обсуждение | вклад) (Новая: == Ссылки == *Особенности языка: продвинутый уровень *[http://pascalabc.net/ru/bazovyie-osobennosti-yazyika-i-bibliotek.html Сайт PascalAB...) |
Mikst (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
<source lang="Delphi">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.</source> | |||
== Ссылки == | == Ссылки == | ||
*[[Особенности языка: продвинутый уровень]] | *[[Особенности языка: продвинутый уровень]] | ||
*[http://pascalabc.net/ru/bazovyie-osobennosti-yazyika-i-bibliotek.html Сайт PascalABC.NET: Особенности языка] | *[http://pascalabc.net/ru/bazovyie-osobennosti-yazyika-i-bibliotek.html Сайт PascalABC.NET: Особенности языка] |
Версия от 12:14, 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.