带有非抽象方法的 c# Abstract class throw ReflectionTypeLoadException
c# Abstract class with non abstract method throw ReflectionTypeLoadException
我在使用反射时遇到非抽象方法的抽象 class 问题。
下面是我的 classes 的示例:
abstract class ClassA
{
public abstract void Method1();
protected void Method2()
{
//Some logic here....
}
}
class ClassB : ClassA
{
public override void Method1()
{
//Method1 implementation
}
}
我正在使用反射让子 classes 实现特定的 class(在我的示例中为 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(不是抽象的)。
有什么想法吗?
你必须在 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();
问题已解决。导致问题的是另一个库。
我在使用反射时遇到非抽象方法的抽象 class 问题。
下面是我的 classes 的示例:
abstract class ClassA
{
public abstract void Method1();
protected void Method2()
{
//Some logic here....
}
}
class ClassB : ClassA
{
public override void Method1()
{
//Method1 implementation
}
}
我正在使用反射让子 classes 实现特定的 class(在我的示例中为 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(不是抽象的)。
有什么想法吗?
你必须在 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();
问题已解决。导致问题的是另一个库。