Embarcadero Delphi
Utilizzo di RTTI in Delphi
Ricerca…
introduzione
Delphi ha fornito Runtime Type Information (RTTI) più di dieci anni fa. Eppure ancora oggi molti sviluppatori non sono pienamente consapevoli dei suoi rischi e benefici.
In breve, le informazioni sul tipo di runtime sono informazioni sul tipo di dati di un oggetto che viene impostato in memoria in fase di esecuzione.
RTTI fornisce un modo per determinare se il tipo di un oggetto è quello di una particolare classe o di uno dei suoi discendenti.
Osservazioni
RTTI IN DELPHI - SPIEGATO
Le informazioni di tipo run-time in Delphi - può fare nulla per te? l'articolo di Brian Long fornisce un'ottima introduzione alle funzionalità RTTI di Delphi. Brian spiega che il supporto RTTI in Delphi è stato aggiunto innanzitutto per consentire all'ambiente in fase di progettazione di svolgere il proprio lavoro, ma che gli sviluppatori possono anche trarne vantaggio per ottenere alcune semplificazioni del codice. Questo articolo fornisce anche una grande panoramica delle classi RTTI insieme ad alcuni esempi.
Gli esempi includono: Lettura e scrittura di proprietà arbitrarie, proprietà comuni senza antenato comune, copia delle proprietà da un componente a un altro, ecc.
Informazioni di base sulla classe
Questo esempio mostra come ottenere l'ascendenza di un componente utilizzando le proprietà ClassType
e ClassParent
. Utilizza un pulsante Button1: TButton
e una casella di ListBox1: TListBox
su un modulo TForm1
.
Quando l'utente fa clic sul pulsante, il nome della classe del pulsante e i nomi delle sue classi parent vengono aggiunti alla casella di riepilogo.
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;
La casella di riepilogo contiene le seguenti stringhe dopo che l'utente fa clic sul pulsante:
- TButton
- TButtonControl
- TWinControl
- TControl
- TComponent
- TPersistent
- TObject