2009-02-03 107 views
4

在C#中,如何查找某个对象是否是某个类的实例,而不是该类的任何超类?如何查找对象是否来自类但不是超类?

即使对象实际来自超类,“is”也会返回true。

+1

阿里,你的意思是问子类,不是超类。如果D从B下降,那么D是一个子类,B是D的超类。 – 2009-02-03 15:08:32

+0

@RobKennedy如果你在子集/超集中看到sub/super的语义,那么这是毫无意义的。我想这是我们作为程序员的内部小玩笑。 – Alex 2014-06-29 17:48:16

+0

其实,@Alex,它使*完美*感。一个类型就是所有具有该类型的值的集合。因此,'D'类型的任何值都是集合** D **和集合** B **的成员,但是集合** B **中的成员不是**的成员d **。类型** D **因此是** B **的子集。我们用符号`D <:B`表示。查看[Benjamin C. Pierce撰写的类型和编程语言](http://www.cis.upenn.edu/~bcpierce/tapl/index.html)。 – 2014-06-29 17:59:31

回答

13
typeof(SpecifiedClass) == obj.GetType() 
2

不幸的是,这在C#中是不可能的,因为C#不支持多继承。给这个继承树:

GrandParent 
    Parent 
    Child 

Child将永远继承链中每一个类型上面的实例。

1

你可能想看看一对夫妇对类型类的方法: Type.IsInstaceOf 和 Type.IsSubclassOf

您可以在类传给你正在寻找和获得您需要的信息。

3

你可以比较你的对象类的类型,你正在寻找的类型:

class A { } 
class B : A { } 

A a = new A(); 
if(a.GetType() == typeof(A)) // returns true 
{ 
} 

A b = new B(); 
if(b.GetType() == typeof(A)) // returns false 
{ 
} 
0
if(Obj.GetType() == typeof(ClassName)) 

这为我工作

相关问题