仅当所涉及的对象(derivedClass
分别为baseClass
和myClass
)是object
或未记录RuntimeType
对象的实例(注意Type是抽象的)时,这 3 行中的每一行都将返回 true ,因此例如以下将导致 true 语句:
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