interfaceだけ実行時型情報がとれないとかどうなってるんだ
少なくとも、この挙動が正しいならプロパティ名を分けないと分からん

interface I {}
class C : I {}
class D : C {}

void o(in Object obj) { writeln(obj.classinfo.name); }
void i(in I obj) { writeln(obj.classinfo.name); }
void c(in C obj) { writeln(obj.classinfo.name); }

void main() {
auto d = new D;
o(d); // classname D
i(d); // classname I
c(d); // classname D
}