什么时候是obj.GetType()。IsInstanceOfType(typeof(MyClass))是真的吗?

时间:2012-08-28 13:36:37

标签: c# types isinstance

我正在查看其他人编写的这段代码,我想知道它什么时候会评估为真。基本上,它说someType是someOtherType的一个实例。它甚至有意义吗?到目前为止,我已经尝试过:

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

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

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

所有人都评价为假。

感谢任何帮助。

5 个答案:

答案 0 :(得分:6)

IsInstanceOfType()检查您传递的实例是否是您调用它的类型的实例。

您正在将System.Type个实例传递给IsInstanceOfType()。只有在typeof(Type)或其中一个基类上调用它时才会出现这种情况。

答案 1 :(得分:5)

如果涉及的对象(分别为derivedClassbaseClassmyClass)是{{1}的实例,则这3行中的每一行都将返回true 或者,未记录的object对象(注意Type是抽象的),例如,以下将导致真正的语句:

RuntimeType

请注意,所使用的类型(在这种情况下为var myObject = new object(); myObject.GetType().IsInstanceOfType(typeof(Console)); myObject = typeof(Object); myObject.GetType().IsInstanceOfType(typeof(Console)); )并不重要,并且对语句的结果没有影响。

<强>为什么吗

IsInstanceOfType的文档告诉我们,如果传入的对象是当前类型的实例,它将返回true,例如,如果Console是派生的类,则以下语句将返回true来自myForm,否则会返回false。

Form

在你的情况下,typeof(Form).IsInstanceOfType(myForm); 实际上是myForm,它是未记录的类型typeof(BaseClass)(源自RuntimeType),所以你只会得到如果此未记录的类型恰好从提供的类型派生,则返回Type - 这不太可能是期望的行为。

我应该使用什么?

您可能会追随的是is keword,如果提供的对象是给定类型的实例,则会返回true

true

答案 2 :(得分:2)

如果当前类型位于由表示的对象的继承层次结构中,则Type.IsInstanceOf documentation表示Type.IsInstanceOfType(o)返回“ true o ,或者当前类型 o 支持的界面。“

在上面的示例中,TypeGetType()返回的类型,因此它是最左侧对象的类型。对象otypeof(BaseClass),其类型为Type。当前TypeDerivedClass,对象otypeof(BaseClass)o的类型为Type

将其插入文档中。如果DerivedClass位于Type的继承层次结构中,则返回“ true 。”

这种情况很少发生。

作者几乎肯定打算typeof(BaseClass).IsInstanceOfType(derivedClass),更容易写成derivedClass is BaseClass

答案 3 :(得分:0)

当您调用GetType()on的对象是作为IsInstanceOfType()方法的参数的参数传递的System.Type对象的实例时,确实如此。

答案 4 :(得分:0)

IsInstanceOfType确定指定的对象是否是当前Type的实例。

示例:IsInstanceOfType(o)

如果当前Type位于由o表示的对象的继承层次结构中,或者当前Type是o支持的接口,则返回true。如果不满足这些条件,或者o为null,或者当前Type是开放泛型类型,则返回false