vale, eso ya es otra cosa: no dices cualquier tipo, sino un conjunto limitado de clases con cosas en comun.
tienes la posibilidad de definir un interface que defina ciertas operaciones comunes y genericas y hacer diferentes clases que implementen ese interfaz.
luego a la hora de identificarlos puedes usar la sentencia
instance of AquiPonesLaClaseQueSea
con cada uno de los tipos que hayas definido.
en conclusion, defines un interfaz MiInterfaz, haces un arbol o lista de objetos que implementen MiInterfaz y luego a la hora de identificarlos concretamente usas el instance of o directamente las funciones definidas de forma general en MiInterfaz.
espero que con eso te sirva para empezar