无论怎样,先感谢你的回复。下面是我在网上找到的解决方法,附上我对这段代码的理解- class Program
- {
- public class Base { }
- public class Sub1 : Base { }
- public class Sub2 : Base { }
- public class Sub3 : Sub1 { }
- static void Main(string[] args)
- {
- var subTypeQuery = from t in Assembly.GetExecutingAssembly().GetTypes()
- where IsSubClassOf(t, typeof(Base))
- select t;
- foreach (var type in subTypeQuery)
- {
- Console.WriteLine(type);
- }
- }
- static bool IsSubClassOf(Type type, Type baseType)
- {
- var b = type.BaseType;
- while (b != null)
- {
- if (b.Equals(baseType))
- {
- return true;
- }
- b = b.BaseType
- }
- return false;
- }
- }
复制代码 其实原理很简单。我们知道,可以通过Type对象.BaseType获取这个Type对象的基类型。那么首先通过Assembly.GetExecutingAssembly().GetTypes()获取当前程序集的所有类型的Type,然后只需要将所有这些Type对象的基类型逐个跟一个指定的Type比较,就可以找到所有派生自这个指定的Type的Type。
这个是代码出处http://www.cnblogs.com/TianFang/archive/2009/10/24/1588949.html
|