Jak sprawdzić, czy obiekt jest wystąpieniem konkretnej klasy w D?Jak sprawdzić, czy obiekt jest wystąpieniem konkretnej klasy w D?
Coś podobnego do słowa kluczowego Javascript o instanceof
w JavaScript?
Jak sprawdzić, czy obiekt jest wystąpieniem konkretnej klasy w D?Jak sprawdzić, czy obiekt jest wystąpieniem konkretnej klasy w D?
Coś podobnego do słowa kluczowego Javascript o instanceof
w JavaScript?
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);
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));
}
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. –
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 –
@ Михаил Страшун 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. –