AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Rtti und Attribute in Delphi 2010
Thema durchsuchen
Ansicht
Themen-Optionen

Rtti und Attribute in Delphi 2010

Ein Thema von martin_ · begonnen am 25. Aug 2011 · letzter Beitrag vom 25. Aug 2011
Antwort Antwort
martin_

Registriert seit: 19. Mai 2008
Ort: Österreich
89 Beiträge
 
#1

Rtti und Attribute in Delphi 2010

  Alt 25. Aug 2011, 10:43
Hallo,
bin gerade dabei mir das Beispiel von http://www.malcolmgroves.com/blog/?p=476 anzusehen und habe ein Verständnisproblem mit Attributen.
Und zwar bei
Delphi-Quellcode:
  MyAttribute = class(TCustomAttribute)
  private
    FName: string;
    FAge: Integer;
  public
    constructor Create(const Name : string; Age : Integer);
    property Name : string read FName write FName;
    property Age : Integer read FAge write FAge;
  end;
Delphi-Quellcode:
 TMyClass = class
  public
    [MyAttribute('Malcolm', 39)]
    procedure MyProc(const s : string);
    [MyAttribute('Julie', 37)]
    procedure MyOtherProc;
  end;
Was passiert bei [MyAttribute('Malcolm', 39)]? Ist es richtig das in der Methode MyProc ein neues Objekt der Klasse MyAttribute mit den Inhalten ('Malcolm', 39) erzeugt wird?
Das wäre dann gleich mit:
Delphi-Quellcode:
procedure MyProc (...)
var
 a : MyAttribute
begin
  a := MyAttribute.create('Malcolm', 39);
end;
Nur wie erfolgt der Zugriff auf das mittels [MyAttribute('Malcolm', 39)] erzeugte Objekt? Kann man sich da auch so etwas wie var a : MyAttribute anlegen, um nicht jeden Zugriff über TRttiContext durchzuführen?
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: Rtti und Attribute in Delphi 2010

  Alt 25. Aug 2011, 11:01
Attribute sind Teil der RTTI, von daher musst du sie auch darüber auslesen.

Delphi-Quellcode:
var
  ctx: TRttiContext;
  t: TRttiType;
  m: TRttiMethod;
  a: TCustomAttribute;
begin
  t := ctx.GetType(TMyClass);
  m := t.GetMethod('MyProc');
  for a in m.GetAttributes do
  begin
    if a is MyAttribute then
    begin
      ShowMessageFmt('Name: %s, age: %d', [MyAttribute(a).Name, MyAttribute(a).Age]);
    end;
  end;
end;
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz