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