栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

获取抽象类的所有继承的类[重复]

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

获取抽象类的所有继承的类[重复]

这是一个普遍的问题,尤其是在GUI应用程序中,令我惊讶的是,没有BCL类可以直接使用。这是我的方法。

public static class ReflectiveEnumerator{    static ReflectiveEnumerator() { }    public static IEnumerable<T> GetEnumerableOfType<T>(params object[] constructorArgs) where T : class, IComparable<T>    {        List<T> objects = new List<T>();        foreach (Type type in  Assembly.GetAssembly(typeof(T)).GetTypes() .Where(myType => myType.IsClass && !myType.IsAbstract && myType.IsSubclassOf(typeof(T))))        { objects.Add((T)Activator.CreateInstance(type, constructorArgs));        }        objects.Sort();        return objects;    }}

一些注意事项:

  • 不必担心此操作的“成本”-您只需要(希望)执行一次,即使这样它也不会像您想的那样慢。
  • 您需要使用,
    Assembly.GetAssembly(typeof(T))
    因为您的基类可能在不同的程序集中。
  • 您需要使用条件
    type.IsClass
    !type.IsAbstract
    因为如果您尝试实例化接口或抽象类,它将引发异常。
  • 我喜欢强制枚举类实现,
    IComparable
    以便可以对它们进行排序。
  • 您的子类必须具有相同的构造函数签名,否则它将引发异常。这通常对我来说不是问题。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/576299.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号