在运行时检查对象的类

时间:2019-01-04 21:35:41

标签: d

我有一些继承类,例如AB: A。 我找到了一种方法来运行时进行检查,我正在处理哪个类:

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

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

但是有更好的方法吗?现在,我真的对typeid typeofis感到困惑。

1 个答案:

答案 0 :(得分:2)

如果您需要知道它是该类型还是它的任何子类型,这可能是在这些情况下的最佳计划:

(cast(B)a) !is null

如果您需要知道一个罕见的确切类型,可以使用:

a.classinfo is B.classinfo