c#使用非抽象方法的抽象类抛出ReflectionTypeLoadException

时间:2018-01-05 18:25:21

标签: c# .net inheritance abstract

当我使用Reflection时,我的抽象类有一个非抽象方法的问题。

以下我的课程示例:

abstract class ClassA
{
    public abstract void Method1();

    protected void Method2()
    {
        //Some logic here....
    } 
}

class ClassB : ClassA
{
    public override void Method1()
    {
        //Method1 implementation
    }
}

我正在使用反射来获取实现特定类的子类(在我的示例中为ClassA)

var types = AppDomain.CurrentDomain.GetAssemblies()
            .Where(a => a.FullName.StartsWith("MyAssembly"))
            .SelectMany(s => s.GetTypes())
            .Where(p => p.IsClass &&  p.IsSubclassOf(ClassA)).ToList();

在“s.GetTypes()”调用中,.Net抛出一个“System.Reflection.ReflectionTypeLoadException”,说ClassB没有实现Method2(不是抽象的)。

任何想法?

2 个答案:

答案 0 :(得分:1)

你必须在classA之前使用typeof,参见示例:

var types = AppDomain.CurrentDomain.GetAssemblies()
            .Where(a => a.FullName.StartsWith("MyAssembly"))
            .SelectMany(s => s.GetTypes())
            .Where(p => p.IsClass && p.IsSubclassOf(typeof(ClassA))).ToList();

答案 1 :(得分:0)

问题已解决。这是造成问题的另一个图书馆。