It should just work.
type
A = ref object of RootObj
B = ref object of A
C = ref object of B
proc foo(xs: openarray[B]) =
for x in xs:
if x of C: echo "C"
elif x of B: echo "B"
elif x of A: echo "A"
foo([C(), B(), C()])
Run
output
C
B
C
Run
