如何在D?
中测试对象是否是特定类的实例类似于Javascript的instanceof
关键字?
答案 0 :(得分:15)
使用cast
。当您尝试转换为子类时,它返回一个空引用,它不是一个实例(如C ++的dynamic_cast)。
auto a = new Base;
auto b = cast(Child) a;
assert(b is null);
a = new Child;
auto c = cast(Child) a;
assert(c !is null);
答案 1 :(得分:4)
typeid expression可以告诉您实例是否具有某种确切类型(不考虑继承层次结构):
class A {}
class B : A {}
void main()
{
A a = new B();
// dynamic
assert( typeid(a) == typeid(B) );
// static
assert( typeid(typeof(a)) == typeid(A) );
}