{ %NORUN } program tw26481; {$MODE DELPHI} type IComparer = interface function Compare(constref Left, Right: T): Integer; overload; end; TOrdinalComparer = class(TInterfacedObject, IComparer) protected class var FComparer: IComparer; FTest: TClass; public function Compare(constref Left, Right: T): Integer; virtual; abstract; end; TGOrdinalStringComparer = class(TOrdinalComparer) public function Compare(constref ALeft, ARight: T): Integer; override; end; function TGOrdinalStringComparer.Compare(constref ALeft, ARight: T): Integer; begin Result := FComparer.Compare(ALeft, ARight); end; begin end.