zoukankan      html  css  js  c++  java
  • 从基类中获取所有子类名

    有的时候,我们需要获取某个基类中的所有子类,从而进行统一管理。这里有一个简单易行的实现:  

    class Program
    {
        
    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;
        }

    }

    public class Base { }
    public class Sub1 : Base { }
    public class Sub2 : Base { }
    public class Sub3 : Sub1 { }  

    原理很简单,通过反射获取某个Assembly下所有类型,然后将其基类依次对比。效率自然是很差,如果不是频繁使用的话则是一种行之有效的方法。当然,如果需要频繁使用,可以通过程序中的硬编码实现,虽然不容易维护,但效率上比这个是要高太多倍的。

  • 相关阅读:
    USACO 5.5 Twofive
    USACO 5.4 Telecowmunication
    USACO 5.4 Character Recognition
    BZOJ 1001: [BeiJing2006]狼抓兔子
    USACO 5.4 Canada Tour
    USACO 5.3 Big Barn
    USACO 5.3 Network of Schools
    USACO 5.3 Window Area
    2017辽宁冬令营-4.蚂蚁
    2017辽宁冬令营-3.斐波那契
  • 原文地址:https://www.cnblogs.com/TianFang/p/1588949.html
Copyright © 2011-2022 走看看