Nja, im Prinzip kann man nur Records und Objekte "verwenden",
wobei man innerhalb der generischen Klasse/Funktion nur mit Instanzen jonglieren kann, aber nicht mir Funktionen davon oder dessen Inhalt.
Wenn der Delphicompiler aber den generischen Typ erst "auswerten" würde und vorher nur die Syntax prüfen täte, dann könnte man viel mehr damit anstellen.
Das stimmt nicht. Sofern du einen Constraint setzt, kannst du innerhalb der Methoden deiner Klasse problemlos auf Eigenschaften und Methoden des generischen Typs zugreifen, du musst nur unter Umständen T auf deine Klasse/Interface umcasten.
Beispiel:
Delphi-Quellcode:
type
TFoo<T: class, constructor> = class
function CreateNewObject: T;
procedure FreeAndNil(var AObject: T);
function GetClassName: string;
end;
{ TFoo<T> }
function TFoo<T>.CreateNewObject: T;
begin
Result := T.Create;
end;
procedure TFoo<T>.FreeAndNil(var AObject: T);
begin
AObject.Free;
AObject := nil;
end;
function TFoo<T>.GetClassName: string;
begin
Result := T.ClassName;
end;