Kod: Tümünü seç
{ 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.
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