2011-02-26 29 views
2

例如,有一个类型A,我怎么能知道它的一个是Windows.Forms.Form?如何知道一个类的最低基地是某种类型

+1

取决于“最低祖先”的含义。所有类型层次结构的基础都是Object,因此没有任何东西可以有Form。如果你的意思是具体类型,形式是非常罕见的,我看不到用法... – 2011-02-26 01:06:05

+0

修改问题 – user496949 2011-02-26 01:07:08

+0

A.BaseType == typeof(System.Windows.Forms.Form) – 2011-02-26 01:09:28

回答

0

像这样(未经):

var x = yourValue; 
var t = x.GetType(); 
var p = t; 
while (p.BaseType != null) 
{ 
    p = t.BaseType; 
} 

如果你正在寻找一个特定的类型,而不是只知道基本是什么,你测试它。

var myX = x as WhateverType; 
if (myX != null) 
{ 
    // Use myX 
} 
+0

只是hardcode typeof(object)... – 2011-02-26 01:07:34

0

在.NET中,它的“最低祖先”将始终是通用基类Object。你能改说你的问题吗?

+0

重新查询问题 – user496949 2011-02-26 01:19:32

2

您可以键入使用IsSubclassOf方法:

var myType = typeof(Form1); 
var formType = typeof(Form); 

Console.WriteLine(myType.IsSubclassOf(formType)); //outputs 'true' 
0

下面是检查类型之间的祖先关系的一个快捷方式。也就是说,如果Form类型的变量可以引用A,那么A就是从Form派生的:A:

Type aType=typeof(A); 

... 
bool isFormAnAncestorOfA = typeof(Form).IsAssignableFrom(aType); 
相关问题