【发布时间】:2015-03-17 16:14:05
【问题描述】:
我写了一个小方法来列出继承的类型,但它不适用于TreeNode,例如:
假设这个类:
class B { }
class A : B { }
class C :TreeNode { }
然后:
GetInheritedTypes(typeof(A)); //typeof(B)
GetInheritedTypes(typeof(C)); // 0 items
列出它们的方法:
List<Type> GetInheritedTypes(Type baseType)
{
return Assembly.GetAssembly(baseType)
.GetTypes()
.Where(type => type != baseType && type.IsAssignableFrom(baseType))
.ToList();
}
为什么 GetInheritedTypes(typeof(C)) 返回 0 个项目而不是 Typeof(TreeNode)?
【问题讨论】:
-
C和TreeNode是否在同一个程序集中声明? -
@MarcinJuraszek:不,他们不是,除非 Jack 正在努力将 C 类型添加到 System.Windows.Forms.DLL。
-
@EricLippert 好点。或者他有自己的
TreeNode类声明? :) -
@EricLippert:哦,这实际上是在询问
System.Windows.Forms.TreeNode(或者可能是关于System.Web.Ui.WebControls.TreeNode),还是一个名为TreeNode的自定义类? -
@Jamiec
IsAssignableFrom将为父母的父母返回 true。对于存在与继承层次结构无关的有效隐式转换(即实现的接口)的类型,它也将返回 true。
标签: c# reflection inherited