带有非抽象方法的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();