5

私は他の誰かが書いたこのコードを見ていますが、いつ true と評価されるのか疑問に思っています。基本的に、someType は someOtherType のインスタンスであると言っています。それは理にかなっていますか?これまでのところ、私は試しました:

derivedClass.GetType().IsInstanceOfType(typeof(BaseClass)) 

baseClass.GetType().IsInstanceOfType(typeof(DerivedClass)) 

myClass.GetType().IsInstanceOfType(typeof(MyClass)) 

そして、それらはすべて false と評価されます。

どんな助けでも大歓迎です。

4

5 に答える 5

7

IsInstanceOfType()渡したインスタンスが、呼び出したタイプのインスタンスであるどうかを確認します。

System.Typeインスタンスをに渡しますIsInstanceOfType()typeof(Type)これは、それをまたはその基本クラスの1つで呼び出す場合にのみ当てはまります。

于 2012-08-28T13:38:44.817 に答える
6

これらの 3 行のそれぞれは、関連するオブジェクト ( 、およびそれぞれ) が、または文書化されていないオブジェクトのインスタンスである場合にのみtrue を返します ( Typeは抽象であることに注意してください)。たとえば、次のステートメントは true ステートメントになります。derivedClassbaseClassmyClassobjectRuntimeType

var myObject = new object();
myObject.GetType().IsInstanceOfType(typeof(Console));

myObject = typeof(Object);
myObject.GetType().IsInstanceOfType(typeof(Console));

使用される型 (この場合Consoleは ) は問題ではなく、ステートメントの結果には影響しないことに注意してください。

なんで?

IsInstanceOfTypeのドキュメントには、渡されたオブジェクトが現在の型のインスタンスである場合に true が返されることが示されています。たとえば、次のステートメントはmyForm、 が から派生したクラスである場合に true を返しForm、それ以外の場合は false を返します。

typeof(Form).IsInstanceOfType(myForm);

あなたの場合myForm、実際typeof(BaseClass)には、文書化されていない型RuntimeType(から派生) であるため、この文書化されていない型が提供された型から派生した場合Typeにのみ返されます。これは、望ましい動作である可能性は低いです。true

代わりに何を使用すればよいですか?

おそらくあなたが求めているのは is keword です。これは、指定されたオブジェクトが指定された型のインスタンスである場合に true を返します。

derivedClass is BaseClass
baseClass is DerivedClass
myClass is MyClass
于 2012-08-28T13:51:51.427 に答える
3

Type.IsInstanceOfドキュメントには、 「現在の Type が o で表されるオブジェクトの継承階層にある場合、または現在の Type が o がサポートするインターフェースである場合にtrue返す」記載されType.IsInstanceOfType(o)います。

上記の例では、Typeは によって返される型なGetType()ので、一番左にあるオブジェクトの型です。オブジェクトotypeof(BaseClass)で、タイプはTypeです。現在TypeDerivedClassで、オブジェクトotypeof(BaseClass)です。の型はoですType

それをドキュメントに差し込みます。「の継承階層にある場合はtrue」を返します。DerivedClassType

これが当てはまることはめったにありません。

著者はほぼ確実に を意図typeof(BaseClass).IsInstanceOfType(derivedClass)していましたが、これはderivedClass is BaseClass.

于 2012-08-28T13:44:42.973 に答える
0

GetType() を呼び出すオブジェクトが、IsInstanceOfType() メソッドのパラメーターに引数として渡される System.Type オブジェクトのインスタンスである場合は true です。

于 2012-08-28T13:38:02.773 に答える
0

IsInstanceOfType指定されたオブジェクトが現在の Type のインスタンスであるかどうかを判断します。

サンプル : IsInstanceOfType(o)

現在の Type が o で表されるオブジェクトの継承階層にある場合、または現在の Type が o でサポートされているインターフェイスである場合は true。これらの条件のいずれも満たされていない場合、または o が null の場合、または現在の Type がオープン ジェネリック型である場合は false

于 2012-08-28T13:38:24.413 に答える