Attributes v Delphi 2010

vložil Radek Červinka 19. dubna 2011 00:00

V Delphi 2010 přibyla možnost používat atributy v kódu. Jedná se o podobný mechanismus jako je i v .NET a tento mechanismus otevírá celkem velké možnosti.

Tento mechanismus umožňuje označit část kódu (např. třída, proměnná, metoda…) určitým způsobem a za běhu s ním pracovat. Základem pro toto označování je třída TCustomAttribute.

Pokud tedy potřebujeme něco specifikovat, tak vytvoříme následníka této třídy a v kódu ho následně použijeme.

  TAttrID = class(TCustomAttribute)
  private
    FID: Integer;
  public
    constructor Create(iId:Integer);
    property ID:Integer read FID write FID;
  end;

příklad:
  [TAttrID(1)]
  TMyClass = class
  protected
    [TAttrID(2)]
    FName: string;
  public
    [TAttrID(3)]
    procedure Print;
    [TAttrID(4)]
    property Name:string read FName write FName;
  end;

V ukázce byl deklarován typ atributu TAttrID, který má jeden parametr (viz. constructor). Následně je na několika místech použit.

  [TAttrID(293455)]
  [TAttrID(22)] // double attr
  TMyRecord = record
    Name:string;
    public procedure Print;
  end;


const
  IDENT_REC = 2334;
var
  [TAttrID(IDENT_REC)]
  rec:TMyRecord;

Lze specifikovat i více atributů a označit lze prakticky všechno.

Za běhu lze přistupovat přes RTTI např. takto:


uses
  Rtti;
….

var
  c : TRttiContext;
  t : TRttiType;
  a : TCustomAttribute;

begin
 c := TRttiContext.Create;
 try
   t := c.GetType(TMyClass);
   for a in  t.GetAttributes do
   begin
     Writeln((a as TAttrID).ID);
   end;
 finally
   c.Free
 end;

Na co to použít? Většina lidí to používá na některou formu persistence - tj. uložení objektu někam a pak ho znovu načíst. Např. se dá specifikovat u jednotlivých polí objektu sloupce DB. Myslím, že se to používá i v DataSnap a jinde.

Různé možnosti použití viz. tindex.net/Attributes.html, např. XML serializace.

Původně jsem o tom ani nechtěl psát, jelikož to reálně nepoužívám, ale chtěl jsem aby byl popis novinek v Delphi (aspoň v hlavních věcech skoro) kompletní. Třeba to někoho inspiruje.

Tagy: ,

Novinky v Delphi

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS