我正在查看其他人编写的这段代码,我想知道它什么时候会评估为真。基本上,它说someType是someOtherType的一个实例。它甚至有意义吗?到目前为止,我已经尝试过:
derivedClass.GetType().IsInstanceOfType(typeof(BaseClass))
baseClass.GetType().IsInstanceOfType(typeof(DerivedClass))
myClass.GetType().IsInstanceOfType(typeof(MyClass))
所有人都评价为假。
感谢任何帮助。
答案 0 :(得分:6)
IsInstanceOfType()
检查您传递的实例是否是您调用它的类型的实例。
您正在将System.Type
个实例传递给IsInstanceOfType()
。只有在typeof(Type)
或其中一个基类上调用它时才会出现这种情况。
答案 1 :(得分:5)
如果涉及的对象(分别为derivedClass
,baseClass
和myClass
)是{{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 支持的界面。“
在上面的示例中,Type
是GetType()
返回的类型,因此它是最左侧对象的类型。对象o
为typeof(BaseClass)
,其类型为Type
。当前Type
为DerivedClass
,对象o
为typeof(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