D 在运行时检查对象的类

D 在运行时检查对象的类,d,D,我有一些继承类,比如A和B:A。 我找到了一种方法,可以在运行时检查我要处理的类: A a = new A; if( some condition ) a = new B; if (a.classinfo.name == "a.b") writeln("That previous condition was met"); 然而,还有更好的办法吗?我现在真的对typeidtypeof和is感到困惑,如果您需要知道它是那种类型还是它的任何子类型,在这些情况下,哪种可能是最好的计划: (c

我有一些继承类,比如
A
B:A
。 我找到了一种方法,可以在运行时检查我要处理的类:

A a = new A;
if( some condition )
  a = new B;

if (a.classinfo.name == "a.b")
  writeln("That previous condition was met");

然而,还有更好的办法吗?我现在真的对
typeid
typeof
is
感到困惑,如果您需要知道它是那种类型还是它的任何子类型,在这些情况下,哪种可能是最好的计划:

(cast(B)a) !is null
如果您需要知道确切的类型(这种情况很少见),您可以使用:

a.classinfo is B.classinfo