2009-02-03 101 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)) 

這爲我工作

相關問題