2012-01-24 8 views

答えて

15

castを使用してください。サブクラスにキャストしようとするとnull参照を返します(C++の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インスタンスは(継承階層を考慮せずに)いくつかの正確な型である場合を伝えることができます:

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

をオブジェクトは、特にそれはだかどうか、_exactly_ないタイプであるかどうかをチェックするために使用することができること特定のタイプのインスタンス。 'typeid(a)== typeid(A)'は 'false'になります。そこには何も「クリーナー」はありません。それは全く異なるものをチェックしています。 –

+0

ああ、私の恩赦を頼んで、言葉を誤解しました。私のためには、 "正確にタイプ" == "タイプのインスタンス"です、私は私の英語を向上させる必要があります:( Upvotedエコの答え –

+0

@МихаилСтрашунそれは一般的な英語以上のプログラミング用語ですしかし、一般的に "インスタンス"という用語は、型が特定の型かどうか、またはその型から派生しているかどうかを意味します。 –

関連する問題