【发布时间】:2018-01-05 18:25:21
【问题描述】:
我在使用反射时遇到了一个带有非抽象方法的抽象类的问题。
下面是我的课程示例:
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(这不是抽象的)。
有什么想法吗?
【问题讨论】:
-
你能显示真实的代码吗?
p.IsSubclassOf(ClassA)不会编译。当我将其更改为p.IsSubclassOf(typeof(ClassA))时,它会编译并运行,没有任何异常。
标签: c# .net inheritance abstract