{ By İsmail Kocacan } unit uReflection; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.Rtti, System.TypInfo; type TForm1 = class(TForm) Button1: TButton; lBox: TListBox; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; TTabanClass = class abstract(TObject) protected procedure Guncelle; virtual; abstract; end; TGumrukYonetmeligi = class(TTabanClass) public procedure Guncelle; override; end; TTebligler = class(TTabanClass) public procedure Guncelle; override; end; var Form1: TForm1; atebligler: TTebligler; agumrukyonetmeligi: TGumrukYonetmeligi; implementation {$R *.dfm} { TTebligler } procedure TTebligler.Guncelle; begin ShowMessage('Tebliğler Güncellendi...'); end; { TGumrukYonetmeligi } procedure TGumrukYonetmeligi.Guncelle; begin ShowMessage('Gümrük Yönetmeliği Güncellendi...'); end; procedure TForm1.Button1Click(Sender: TObject); var r: TRttiContext; rtype: TRttiType; obj: TObject; begin r := TRttiContext.Create; for rtype in r.GetTypes do begin if (rtype.TypeKind = tkClass) and rtype.IsInstance and rtype.AsInstance.MetaclassType.InheritsFrom(TTabanClass) and (rtype.Name <> TTabanClass.ClassName) then begin lBox.Items.Add(rtype.Name); obj := rtype.AsInstance.MetaclassType.Create; TTabanClass(obj).Guncelle; end; end; r.Free; end; procedure TForm1.FormCreate(Sender: TObject); begin atebligler := TTebligler.Create; agumrukyonetmeligi := TGumrukYonetmeligi.Create; end; end.
Yukarıda TTabanClass isminde soyut bir sınıf ve bu sınıfa ait Guncelle isminde soyut bir prosedür var.
TGumrukYonetmeligi ve TTebligler sınıfları TTabanClass isimli sınıftan türetilmiş ve Güncelle prosedürlerinin gövdeleri yapılandırılmıştır.
FormCreate eventinde de TTabanClass sınıfından türetilen TTebligler ve TGumrukYonetmeligi sınıflarından birer tane nesne referansı oluşturulmuştur.
Şimdi benim yapmak istediğim de şuydu.
"TTabanClass" sınıfından türeyen tüm sınıfların,nesne referanslarının, ortak methodu olan "Guncelle" prosedürünü çalıştırmaktı.
Yaptım oldu :)
Düzenlemeler : DelphiTürkiye Forum
Hiç yorum yok:
Yorum Gönder