Eine einfache
OOP Lösung gibt es nicht - sobald man mit "is" arbeiten muss, hat man schon den goldenen Pfad verlassen.
Daher würde ich nicht versuchen, eine nicht vorhandene Basisklasse durch eher "kosmetische" Tricks im Sourcecode auszubügeln (class helper oder
RTTI).
Eher würde ich explizit die verschiedenen Klassen auch mit verschiedenen Methoden behandeln, die dürfen in Delphi über overload ja auch gleiche Namen haben.
Delphi-Quellcode:
var
lObject: TObject;
Class1Obj: TClass_1;
Class2Obj: TClass_2;
begin
lObject := GetObject(ID); // Kann ein Verweis auf TClass_1 oder TClass_2 zurückgeben
if assigned(lObject) then
begin
if lObject is TClass_1 then
begin
Class1Obj := lObject as TClass_1;
DoSomethingWith(Class1Obj);
end else if if lObject is TClass_2 then
begin
Class2Obj := lObject as TClass_2;
DoSomethingWith(Class2Obj);
end
end;
end;
procedure DoSomethingWith(const Obj: TClass_1); overload;
begin
...
end;
procedure DoSomethingWith(const Obj: TClass_2); overload;
begin
...
end;