type TBase = abstract class procedure p1(f: T->T2); begin assert(f(default(T)).ToString() = 'abc'); end; end; TErr = class(TBase) // обязательно наследовать от TBase procedure p2; begin var o: TBase := new TErr; o.p1(function(b: byte)-> begin Result := 'abc'; var s: string := Result; var a: byte := b; end); end; end; begin var o := new TErr; o.p2; end.