当我使用反射时,我遇到了一个带有非抽象方法的抽象类的问题。
下面是我的类(class)示例:
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(这不是抽象的)。
有什么想法吗?
最佳答案
你必须在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();
关于c# 具有非抽象方法的抽象类抛出 ReflectionTypeLoadException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48119253/