如何获取引用类型的基类类型

泰勒·布坎南(Tyler Buchanan)

因此,我试图找出如何获取引用的程序集基类类型。例如,我有以下内容:

解决方案A {

..项目A

.... class w

...... GetAllClassesSubclassOfClassX(){如果匹配则返回构造函数}

-项目B

----抽象类x

------抽象方法A()

..项目C

.... class y:x

......重写methodA()

-项目D

---- class z:x

------重写methodA()

所以我当前的代码拉回了引用,但是我不确定如何查看它们是否是特定类类型的子类。

public List<AbstractCWThirdPartyConsumer> GetAllProviders()
{
    AssemblyName[] types = Assembly.GetExecutingAssembly().GetReferencedAssemblies();

    List<AbstractCWThirdPartyConsumer> listOfAllProcessors = new List<AbstractCWThirdPartyConsumer>();
    foreach (AssemblyName type in types)
    {
        if (IsSameOrSubclass(listOfAllProcessors.GetType(), type.GetType()))
        {
             //AbstractCWThirdPartyConsumer proc = (AbstractCWThirdPartyConsumer)type.GetConstructor(Type.EmptyTypes).Invoke(null);
             //listOfAllProcessors.Add(proc);
        }
    }

        return listOfAllProcessors;
    }

    public bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant)
    {
        return potentialDescendant.IsSubclassOf(potentialBase);
    }
}

任何纠正我的问题的帮助将是有帮助的!提前致谢。

沙皮犬

你为什么不使用Type.IsSubclassOf

像这样重写您的方法。

public bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant)
{
    return potentialDescendant.IsSubclassOf(potentialBase);
}

我也确实相信您的方法来枚举程序集中的所有类型是不正确的,所以这里是一个重写的版本,应该符合您的意图:

using System.Linq;
...
public List<AbstractCWThirdPartyConsumer> GetAllProviders()
{
    IEnumerable<Assembly> referencedAssemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies().Select(Assembly.Load);

    List<AbstractCWThirdPartyConsumer> listOfAllProcessors = new List<AbstractCWThirdPartyConsumer>();
    foreach (Assembly assembly in referencedAssemblies)
    {
        foreach(Type type in assembly.ExportedTypes)
        {
            if (IsSameOrSubclass(typeof(AbstractCWThirdPartyConsumer), type))
            {
             //AbstractCWThirdPartyConsumer proc = (AbstractCWThirdPartyConsumer)Activator.CreateInstance(type);
             //listOfAllProcessors.Add(proc);
            } 
        }
    }
    return listOfAllProcessors;
}

public bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant)
{
    return potentialDescendant.IsSubclassOf(potentialBase);
}

或者,如果您真的想将其压缩到单个Linq-Method-Chain中,请执行以下操作:

public List<AbstractCWThirdPartyConsumer> GetAllProviders()
{
     return Assembly.GetExecutingAssembly()
             .GetReferencedAssemblies()
             .Select(Assembly.Load)
             .SelectMany(asm => asm.ExportedTypes)
             .Where(exportedType => exportedType.IsSubclassOf(typeof(AbstractCWThirdPartyConsumer)))
             .Select(exportedType => (AbstractCWThirdPartyConsumer) Activator.CreateInstance(exportedType))
             .ToList();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何引用模板化基类的嵌套类型

来自分类Dev

如何从基类获取派生类类型

来自分类Dev

如何获得对参数化类型的类引用

来自分类Dev

如何在基类中获取派生类的子类型

来自分类Dev

C#如何从基类的派生类中获取特定类型的所有字段?

来自分类Dev

如何从特征对象获取对具体类型的引用?

来自分类Dev

C ++中基类指针引用的对象的打印类型?

来自分类Dev

在C ++中由基类指针引用的对象的打印类型?

来自分类Dev

如何获取函数返回类型的模板成员的解引用类型

来自分类Dev

如何获取函数返回类型的模板成员的解引用类型

来自分类Dev

如何获取类型的类型?

来自分类Dev

调用方法时如何从基中获取派生类类型

来自分类Dev

Scala:如何在超类中引用扩展类的类型?

来自分类Dev

如何获取路径相关类型的类标签

来自分类Dev

如何获取与数组类型关联的类?

来自分类Dev

如何获取类成员的类型注释?

来自分类Dev

如何从类对象获取(通用)类型

来自分类Dev

如何从模板类的范围中获取类型?

来自分类Dev

如何获取类实例类型签名

来自分类Dev

如何获取类中类型参数的擦除类型

来自分类Dev

通过基类虚函数获取派生类型

来自分类Dev

从基类中引发的异常中获取实际类型

来自分类Dev

从抽象基类型的 unique_ptr 获取派生类

来自分类Dev

从类型获取类定义

来自分类Dev

类型错误 - 引用 Javascript 类

来自分类Dev

C# 类引用类型

来自分类Dev

如何在函数的返回类型中引用遵循协议的类?

来自分类Dev

如何获得由输入类arg参数化的类型引用?

来自分类Dev

如何获得由输入类arg参数化的类型引用?

Related 相关文章

热门标签

归档