C# 检查多态对象的类型

C# 检查多态对象的类型,c#,polymorphism,C#,Polymorphism,在C#中,如果我有一个多态对象,如何在不检查基类型的情况下确定对象的类型 以下是一个例子: class object1 : object2 { } testObject = new object1(); 以下两行代码都返回true: bool test1 = testObject is object1; bool test2 = testObject is object2; 如何进行检查以使test2返回false?用于验证这一点 bool test2 = testObject.GetT

在C#中,如果我有一个多态对象,如何在不检查基类型的情况下确定对象的类型

以下是一个例子:

class object1 : object2
{

}

testObject = new object1();
以下两行代码都返回true:

bool test1 = testObject is object1;
bool test2 = testObject is object2;

如何进行检查以使
test2
返回false?

用于验证这一点

bool test2 = testObject.GetType() == typeof(object2);
if(对象是MyObject) {

}


用于验证这一点

if(对象是MyObject) {

}


用户3736648,您得到了一个答案,如何做到这一点,但不幸的是,没有人告诉您,为什么您的版本不起作用

is关键字正在尝试回答,无论实例是
object2
的,还是有一个,都是由
object1
继承的,因此答案在测试的两行上都是正确的,因为您可以这样分配:

object2obj=testObject

obj
只是缺少
object1
的方法/属性, 但是基类,继承类,
object2
实例就在那里

关键字类似

bool test3 = (testObject as object1) != null;//true
bool test4 = (testObject as object2) != null;//true
最后,为什么
GetType
有效?它是基于反射和
它不尝试使用继承,只使用结果类型。

用户3736648,您得到了一个答案,如何做到这一点,但不幸的是,没有人告诉您,为什么您的版本不起作用

is关键字正在尝试回答,无论实例是
object2
的,还是有一个,都是由
object1
继承的,因此答案在测试的两行上都是正确的,因为您可以这样分配:

object2obj=testObject

obj
只是缺少
object1
的方法/属性, 但是基类,继承类,
object2
实例就在那里

关键字类似

bool test3 = (testObject as object1) != null;//true
bool test4 = (testObject as object2) != null;//true
最后,为什么
GetType
有效?它是基于反射和
它不试图玩弄继承,只是结果类型。

我没有完全阅读问题,但我讨厌坐在那里等待否决投票的人。否决投票是表明答案无效的有用工具,并且更频繁地根据错误/不相关信息的严重性授予,等等。有时候最好的解决方法就是简单地使用[删除];之后可能会发布另一个(更正的)答案。此类问题不应被视为个人问题。请添加一个如何解决用户问题的说明。另外,请阅读我没有完全阅读问题,但我讨厌坐着等待否决票的人。否决票是表明答案无效的有用工具,并且根据错误/无关信息等的严重程度更频繁地授予否决票。有时最好的解决方案是简单地使用[删除];之后可能会发布另一个(更正的)答案。此类问题不应被视为个人问题。请添加一个如何解决用户问题的说明。另外,请阅读谢谢你的解释。谢谢你的解释。