【问题标题】:c# Abstract class with non abstract method throw ReflectionTypeLoadExceptionc#带有非抽象方法的抽象类抛出ReflectionTypeLoadException
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-16
      • 2012-09-21
      • 1970-01-01
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      相关资源
      最近更新 更多