Delphiben van lehetőség alprogramok paraméterezésére akár függvénnyel is (alprogram típus). Az újabb Delphi verziókban megjelent a generikus típus, amelyet más típusokkal paraméterezhetünk.
Generikus lehet: alprogram típus, rekord, osztály és interfész típus. A generikus típust úgy deklaráljuk, hogy a neve után <> jelek között felsoroljuk a típusparamétereket.
Fontos: ha a > jel után = következik (típusdeklarációnál mindig így van), akkor a két jel közé szóközt kell tenni, egyébként a fordító a >= karaktersorozatot a „nagyobb vagy egyenlő” operátorként értelmezi.
Metódus lehet generikus, de különálló alprogram nem.
Típusparaméterként átadható tetszőleges típus, kivéve fix méretű tömb, rövid string és olyan rekord, amely tartalmaz tiltott típusú mezőt (ez utóbbi kikötés rekurzív).
Generikus típus példányosításakor a típusparaméterek helyére típusokat írunk.
A példányosítás során új típus (vagy metódus) jön létre. Nincs lehetőség futási idejű példányosításra. Sok példányosítás megnöveli a program méretét.
Generikus metódus példányosítható explicit módon vagy a paraméterekből való kikövetkeztetéssel (ez úgy működik, mint a túlterhelés):
Tapasztalat: a Delphi 2010 IDE panaszkodik a kikövetkeztetéses hívásoknál, hogy nincs ilyen metódus, viszont a fordító le tudja fordítani.
A Delphi a szerződésalapú generikus programozást támogatja: a típusparaméterekről csak annyit feltételezhetünk, amennyit megköveteltünk tőlük, példányosításkor pedig gondoskodnunk kell róla, hogy a típusparaméterek teljesítsék ezeket a követelményeket.
A megszorítás szintaxisa hasonló az alprogram-paraméterek típusának megadásához:
Ha megszorításként egy interfészt adunk meg, akkor az aktuális típusparaméternek meg kell valósítania az interfészt. Mivel Delphiben csak az osztályok és más interfészek valósíthatnak meg interfészt, az interfész megszorítás esetén csak osztály vagy interfész adható át a paraméterben. Egy típusparaméterhez tetszőleges számú interfész megszorítás adható. Ha a megadott interfészek rendelkeznek azonos nevű metódussal, akkor a fordító ezt túlterhelésként kezeli. Előfordulhat, hogy nem lesz egyértelmű a hívás, ilyenkor explicit típuskényszerítéssel oldhatjuk fel a konfliktust.
Egy típusparaméternek legfeljebb egy osztály megszorítás adható meg. Ha megadjuk, akkor az aktuális paraméternek a megadott osztály leszármazottjának kell lennie.
Megadható megszorításként a constructor kulcsszó. Ilyenkor az aktuális paraméternek rendelkeznie kell Create nevű, paraméter nélküli konstruktorral. Mivel Delphiben csak az osztályoknak lehet paraméter nélküli konstruktora, a konstruktor megszorítás esetén csak osztály adható át a paraméterben.
Megadható megszorításként a class vagy a record kulcsszó. Ezek azt kötik ki, hogy a paraméter osztály típus illetve érték szerinti típus. A record megszorítás nem teszi kötelezővé, hogy rekord legyen a paraméter, csak azt, hogy ne legyen referencia típus. (Delphiben az interfész és az osztály a referencia típusok.) class esetén viszont kötelezően osztályt kell megadni. Értelemszerűen a record megszorítás nem kombinálható a többi fajta megszorítással.