我如何测试对象是D中特定类的实例?

时间:2012-01-24 21:00:03

标签: instance equality d

如何在D?

中测试对象是否是特定类的实例

类似于Javascript的instanceof关键字?

2 个答案:

答案 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) );
}