DLL帮助类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

/// <summary>
/// DLL帮助类
/// </summary>
namespace COMMON
{
public class DllHelper
{
/// <summary>
/// C#获取一个类在其所在的程序集中的所有子类
/// </summary>
/// <param name="parentType">给定的类型</param>
/// <returns>所有子类</returns>
public static List<Type> GetSubClassNames(Type parentType)
{
var subTypeList = new List<Type>();
var assemblys = AppDomain.CurrentDomain.GetAssemblies().ToList();//获取当前父类所在的程序集``
assemblys.ForEach(assembly =>
{
var assemblyAllTypes = assembly.GetTypes();//获取该程序集中的所有类型
foreach (var itemType in assemblyAllTypes)//遍历所有类型进行查找
{
var baseType = itemType.BaseType;//获取元素类型的基类
if (baseType != null)//如果有基类
{
if (baseType.Name == parentType.Name)//如果基类就是给定的父类
{
subTypeList.Add(itemType);//加入子类表中
}
else if (baseType.Name != "Object" && baseType.BaseType.Name == parentType.Name)
{
subTypeList.Add(itemType);
}
}
}
});

return subTypeList.ToList();//获取所有子类类型的名称
}

/// <summary>
/// C#获取一个类在其所在的程序集中的所有子接口
/// </summary>
/// <param name="parentType">给定的类型</param>
/// <returns>所有子类</returns>
public static List<Type> GetSubInterfaceNames(Type parentType)
{
var subTypeList = new List<Type>();
var assemblys = AppDomain.CurrentDomain.GetAssemblies().ToList();//获取当前父类所在的程序集``
assemblys.ForEach(assembly =>
{
var assemblyAllTypes = assembly.GetTypes();//获取该程序集中的所有类型
subTypeList.AddRange(assemblyAllTypes.Where(i => parentType.IsAssignableFrom(i) && i != parentType && !i.IsClass));
});

return subTypeList;//返回所有继承parentType的接口类
}
}
}

posted @   问渠哪得清如许-修  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示