Как я могу проверить, что объект является экземпляром определенного класса в D? - PullRequest
12 голосов
/ 25 января 2012

Как мне проверить, что объект является экземпляром определенного класса в D?

Что-то похожее на ключевое слово instanceof в Javascript?

Ответы [ 2 ]

15 голосов
/ 25 января 2012

Используйте 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);
4 голосов
/ 25 января 2012

typeid выражение может сообщить вам, если экземпляр имеет какой-то точный тип (без учета иерархии наследования):

class A {}

class B : A {}

void main()
{
        A a = new B();
        // dynamic
        assert( typeid(a) == typeid(B) );
        // static
        assert( typeid(typeof(a)) == typeid(A) );
}
...