O ile dobrze cię zrozumiałem, do nie da się dynamicznie typować parametrów metod. Delphi to strong typing, ale zawsze może w owej metodzie sprawdzić co trzeba i rzucić odpowiednim wyjątkiem.
Jest mechanizm ograniczeń w typach generycznych (podobny do tego z C#) więcej o Constraints in Generics
A używa się tego tak:
interface
type
TMyClass = class
public
function Foo<T: class>(const AClass: T): T;
end;
implementation
function TMyClass.Foo<T>(const AClass: T): T;
begin
// coś tam ze zmienną AClass, która jest typu T z ograniczeniem do klasy
end;
Ograniczenie możesz zawęzić do konkretnego typu klasowego (ale nie tylko klasy, szczegóły w manualu) czyli deklaracja metody Foo może wyglądać tak:
type
TMyClass = class
public
function Foo<T: TComponent>(const AClass: T): T;
end;
A używa się tego normalnie jak metody, czyli:
// to wykona się poprawnie
Foo(TComponent(ASomeObject));
// a tu dostaniesz błąd na etapie okmpilacji
Foo('string!');