2012-01-24 18 views

Odpowiedz

15

Użyj cast. Zwraca referencję zerową przy próbie rzutowania na podklasę, która nie jest instancją (podobnie jak C++ 's 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

typeid expression może powiedzieć, czy instancja jest pewnego dokładnego typu (bez brania pod uwagę hierarchię dziedziczenia):

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

które mogłyby być wykorzystane w celu sprawdzenia, czy dany obiekt jest _exactly_ szczególnie typ, a nie czy jest to wystąpienie określonego typu. 'typeid (a) == typeid (A)' miałoby wartość 'false'. Nie ma w tym nic "czystszego". Sprawdza coś zupełnie innego. –

+0

Ach, błagam więc o wybaczenie, niezrozumiałe sformułowanie. Dla mnie "jest dokładnie typu" == "jest instancją typu", wygląda na to, że muszę poprawić mój angielski :( Przewyższona odpowiedź ekologiczna –

+0

@ Михаил Страшун Cóż, to terminologia programowania bardziej niż ogólny angielski, i może to być nieco mylące, ale ogólnie termin "wystąpienie" odnosi się do tego, czy typ jest określonego typu, czy pochodzi od tego typu, w przeciwieństwie do tego, czy jest to _exactly_ tego typu. –

Powiązane problemy