仅当所涉及的对象(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