Also ich kann mir zwar noch nicht 100%ig vorstellen was du da machst, aber es hört sich so an als ob du mit Klassen und Vererbung weiterkommen solltest.
Dann kannst du konkrete Klasse einfach als Typ der Basisklasse übergeben. Und du kannst in den abgeleiteten Klassen bestimmte abweichende Funktionalitäten implementieren (überschriebene Methoden, ...), die dann über die Basisklasse aufgerufen werden kann.
Aber wie Uwe Raabe schon sagte:
Ich glaube auch das Problem ist eher das Gesamtkonzept...
Was ist jetzt daran Blödsinn?
Damit meinte ich verschiedene Typen zu übergeben und dann den Typ doch wieder zu unterscheiden. Wenn, dann macht eine gemeinsame Prozedur nur Sinn, wenn der größte Teil der Prozedur auch unabhängig vom konkreten Typ funktioniert.