2012-01-24 36 views

cevap

15

cast'u kullanın. Bir alt sınıfa döktüğünüzde (C++ 'nin dynamic_cast gibi) bir örneği olmadığında boş bir değer döndürür. örneği (miras hiyerarşisini dikkate alınmadan) bazı kesin türü ise

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 söyleyebilirim: Bir nesne özellikle tip _exactly_ olup olmadığını kontrol etmek kullanılabilecek

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

, bu kadar olmasa da bir belirli bir türün örneği. 'typeid (a) == typeid (A)' 'false 'olur. Bunun hakkında "temiz" bir şey yok. Oldukça farklı bir şey kontrol ediyor. –

+0

Ah, afedersiniz, sonra yanlış anladım. Benim için "bir tür tam olarak" == "bir türün örneğidir", ingilizcemi geliştirmem gerekiyor gibi görünüyor :( Upvoted eco'nun cevabı. –

+0

@ Михаил Страшун Bu, genel terminolojiden daha fazla programlama terminolojisi ve Biraz kafa karıştırıcı olabilir, ancak genellikle "örneği" terimi, bir türün belirli bir tür olup olmadığını veya bu türden _exactly_ tipine karşılık olarak türetilmiş olup olmadığına işaret eder. –