{ %NORUN } program tb0620; type generic TTest<T, S> = object procedure Test(aArg: T; aArg2: S); end; procedure TTest.Test(aArg: T; aArg2: S); begin Delete(aArg, aArg2, 4); Insert('Test', aArg, aArg2); Writeln(aArg); end; type TTestShortString = specialize TTest<ShortString, LongInt>; TTestUnicodeString = specialize TTest<UnicodeString, LongInt>; var tss: TTestShortString; tus: TTestUnicodeString; begin tss.Test('Hello World', 3); tus.Test('Hello World', 4); end.