¿Cómo puedo probar que un objeto es una instancia de una clase particular en D?¿Cómo pruebo que un objeto es una instancia de una clase particular en D?
Algo parecido a la palabra clave instanceof
de Javascript?
¿Cómo puedo probar que un objeto es una instancia de una clase particular en D?¿Cómo pruebo que un objeto es una instancia de una clase particular en D?
Algo parecido a la palabra clave instanceof
de Javascript?
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);
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));
}
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. –
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 –
@ Михаил Страшун 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. –