Embarcadero Delphi
RTTI gebruiken in Delphi
Zoeken…
Invoering
Delphi heeft meer dan tien jaar geleden Runtime Type Information (RTTI) verstrekt. Toch zijn veel ontwikkelaars zich nog steeds niet helemaal bewust van de risico's en voordelen.
Kortom, Runtime Type Information is informatie over het gegevenstype van een object dat tijdens runtime in het geheugen wordt ingesteld.
RTTI biedt een manier om te bepalen of het type van een object van een bepaalde klasse of een van de afstammelingen is.
Opmerkingen
RTTI IN DELPHI - UITGESLOTEN
De runtime-type-informatie in Delphi - kan het iets voor u doen? artikel van Brian Long biedt een geweldige introductie tot de RTTI-mogelijkheden van Delphi. Brian legt uit dat de RTTI-ondersteuning in Delphi eerst en vooral is toegevoegd om de design-time omgeving zijn werk te laten doen, maar dat ontwikkelaars er ook gebruik van kunnen maken om bepaalde code-vereenvoudigingen te realiseren. Dit artikel biedt ook een goed overzicht van de RTTI-klassen, samen met enkele voorbeelden.
Voorbeelden zijn: lezen en schrijven van willekeurige eigenschappen, gemeenschappelijke eigenschappen zonder gemeenschappelijke voorouder, eigenschappen van de ene naar de andere component kopiëren, enz.
Basic Class Informatie
Dit voorbeeld laat zien hoe u de afkomst van een component kunt verkrijgen met behulp van de eigenschappen ClassType
en ClassParent
. Het gebruikt een knop Button1: TButton
en een keuzelijst ListBox1: TListBox
op een formulier TForm1
.
Wanneer de gebruiker op de knop klikt, worden de naam van de klasse van de knop en de namen van de bovenliggende klassen toegevoegd aan de keuzelijst.
procedure TForm1.Button1Click(Sender: TObject) ;
var
ClassRef: TClass;
begin
ListBox1.Clear;
ClassRef := Sender.ClassType;
while ClassRef <> nil do
begin
ListBox1.Items.Add(ClassRef.ClassName) ;
ClassRef := ClassRef.ClassParent;
end;
end;
De keuzelijst bevat de volgende tekenreeksen nadat de gebruiker op de knop heeft geklikt:
- TButton
- TButtonControl
- TWinControl
- TControl
- TComponent
- TPersistent
- TObject