2012-01-24 8 views

Respuesta

15

Use cast. Devuelve una referencia nula cuando intentas convertir a una subclase, no es una instancia de (como dynamic_cast de 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 puede decir si la instancia es de algún tipo exacto (sin tener en cuenta la jerarquía de herencia):

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

que podría ser utilizado para comprobar si un objeto es _exactly_ un particular tipo, no si se trata de una instancia de un tipo particular. 'typeid (a) == typeid (A)' sería 'falso'. No hay nada "más limpio" al respecto. Está comprobando algo bastante diferente. –

+0

Ah, disculpe, palabras mal entendidas. Para mí "es exactamente de un tipo" == "es una instancia de un tipo", parece que necesito mejorar mi inglés :( Respuesta de eco de upvoted –

+0

@ Михаил Страшун Bueno, es la terminología de programación más que el inglés general, y puede ser un poco confuso. Pero generalmente el término "instancia de" se refiere a si un tipo es un tipo particular o si se deriva de ese tipo, en oposición a si es exactamente ese tipo. –

Cuestiones relacionadas