2012-01-24 13 views

ответ

15

Использование cast. Он возвращает нулевую ссылку при попытке применить к подклассу, это не экземпляр (например, динамический_сказ C++).

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

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)); 
} 
+1

Это может быть использовано, чтобы проверить, является ли объект _exactly_ особенно типа, не является ли это экземпляр определенного типа. 'typeid (a) == typeid (A)' будет 'false'. В этом нет ничего «чистого». Это проверяет совсем другое. –

+0

А, прошу прощения, непонятная формулировка. «Для меня» - это точно тип «==» - это пример типа », похоже, мне нужно улучшить свой английский :( Ответ на вопрос о поддержке ответа –

+0

@ Михаил Страшун Ну, это терминология программирования больше, чем общий английский, и это может быть немного запутанным, но в целом термин «экземпляр» относится к тому, является ли тип конкретным типом или является производным от этого типа, в отличие от того, является ли он именно этим типом. –

Смежные вопросы