Атрибуты: различия между версиями

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

Ссылки