从基类中获取所有子类名

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

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下所有类型,然后将其基类依次对比。效率自然是很差,如果不是频繁使用的话则是一种行之有效的方法。当然,如果需要频繁使用,可以通过程序中的硬编码实现,虽然不容易维护,但效率上比这个是要高太多倍的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值