带有非抽象方法的c#抽象类抛出ReflectionTypeLoadException

带有非抽象方法的c#抽象类抛出ReflectionTypeLoadException,c#,.net,inheritance,abstract,C#,.net,Inheritance,Abstract,当我使用反射时,使用非抽象方法的抽象类有问题 下面是我的课程示例: abstract class ClassA { public abstract void Method1(); protected void Method2() { //Some logic here.... } } class ClassB : ClassA { public override void Method1() { //Metho

当我使用反射时,使用非抽象方法的抽象类有问题

下面是我的课程示例:

abstract class ClassA
{
    public abstract void Method1();

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

class ClassB : ClassA
{
    public override void Method1()
    {
        //Method1 implementation
    }
}
我使用反射来获取实现特定类的子类(在我的示例中是ClassA)

在“s.GetTypes()”调用中,.Net抛出一个“System.Reflection.ReflectionTypeLoadException”,表示ClassB未实现Method2(这不是抽象的)


有什么想法吗?

您必须在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();

问题解决了。是另一个库导致了这个问题。

您能显示真正的代码吗<代码>p.IsSubclassOf(ClassA)不会编译。当我将其更改为
p.IsSubclassOf(typeof(ClassA))
时,它编译并运行时没有任何异常。
var types = AppDomain.CurrentDomain.GetAssemblies()
            .Where(a => a.FullName.StartsWith("MyAssembly"))
            .SelectMany(s => s.GetTypes())
            .Where(p => p.IsClass && p.IsSubclassOf(typeof(ClassA))).ToList();