{ %NORUN } program tgeneric29; {$mode delphi} type IGenericInterface = interface function DoSomething(Arg: T): T; end; TGenericClass = class(TInterfacedObject, IGenericInterface) F: T; type Intf = IGenericInterface; function DoSomething(Arg: T): T; function Test(Arg: Intf): Intf; end; TGenericRecord = record F: T; end; TGenericArray = array of T; function TGenericClass.DoSomething(Arg: T): T; begin Result := Arg; end; function TGenericClass.Test(Arg: Intf): Intf; begin Result := Arg; end; var ClassSpecialize: TGenericClass; RecordSpecialize: TGenericRecord; ArraySpecialize: TGenericArray; begin end.