Hmm, ja, das mit dem Klassendesign ist so wohl nicht verständlich (und vielleicht auch diskussionswürdig).
Also noch ein wenig mehr Erklärung:
Ich möchte mit TMS Aurelius meine
DB-Tabellen zugreifbar machen (über REST, aber das spielt beim eigentlichen Problem wohl keine Rolle). Dazu gibt es eine Basisklasse, die die Grundfunktionen zur Verfügung stellt, also vor allem eine Funktion, um die Ergebnisse von Suchen in verschiedenen Formen auszugeben (z.B. als json, als Objekt, als Liste...).
Nun gibt es FObject in der Basisklasse, was sowohl ein direktes Objekt beinhalten kann, als auch ein Array, bzw. eine Objektliste, je nach dem, ob es nur einen Treffer in der
DB bei der Suche gibt, oder eben mehrere. Aurelius liefert hier zweierlei als Ergebniss:
Fobject -> TeinTabellenObjekt
oder
Fobject -> TObjectList<TeinTabellenObject>
Nun möchte ich in meiner Basisclasse gerne zwei Funktionen einbauen, die das Fobject entwerder als Object oder als ObjectList ausgibt:
Delphi-Quellcode:
TBaseClass = class
Fobject: Tobject;
function AsObject: TeinTabellenObjekt
function AsList: TObjectList<TeinTabellenObjekt>;
end;
TSpecialClass<T: class> = class(TBaseClass)
procedure SucheIrgendwas;
end;
procedure TSpecialClass<T>.SucheIrgendwas;
begin
Fobject := Manager.Find<T>(123); // Ergebnis ist vom Typ T
oder
Fobject := Manager.Find<T>.Add(Linq['lastname'] = 'xyz').List; // Ergebnis ist vom Typ TObjectList<T>
end;
Dazu müsste ich in AsObject, wenn Fobject eine Liste ist, das erste Element der Liste ausgeben. Nun ist die Basisklasse aber noch nicht generisch und die Funktion soll ja für alle Objekte funktionieren.
Also in etwa so:
Delphi-Quellcode:
function TBaseClass.AsObject: TeinTabellenObjekt;
begin
Result := Fobject;
if IsObjectList(Fobject) then
Result := TObjectList(Fobject)[0];
end;
So hatte ich es mir vorgestellt. Funktioniert aber leider nicht...
Am liebsten hätte ich in AsObject ja noch den Typ mit dabei, aber es würde mir schon reichen, wenn ich ein Tobject aus der Liste bekäme.
Viele Grüße
Harald