c# Activator.CreateInstance()去掉了“不能创建抽象类”;例外

本文关键字:创建 不能 抽象类 例外 掉了 CreateInstance Activator | 更新日期: 2023-09-27 18:06:27

我试图动态加载。dll文件并运行它的一个方法(实际上只有一个方法..),但Activator。CreateInstance方法抛出"不能创建抽象类"异常这是我的代码:

Assembly assembly = Assembly.Load(DLLByteArray);
//Type typeToExecute = assembly.GetType("ClassLibrary1.Class1");
//last line was replaced with the next one to ensure that the name is correct.
Type typeToExecute = assembly.GetTypes()[0];
Object instance = Activator.CreateInstance(typeToExecute);

需要时船级减速:" public static unsafe class Class1 ".

.DLL类代码中的任何东西都可能导致这种异常吗?

c# Activator.CreateInstance()去掉了“不能创建抽象类”;例外

你想做什么:

Assembly assembly = Assembly.Load(DLLByteArray);
Type typeToExecute = assembly.GetTypes()[0];
typeToExecute.GetMethod("TheMethod").Invoke(null, theArguments);

调用包含所有方法参数的object[] (theArguments)静态方法

另一个解决方案是简单地从类和方法中删除static关键字(这将使您当前的代码工作)

您正在尝试创建静态类的实例。你不能这样做——它没有任何构造函数(静态类既是抽象的又是密封的)。

消息非常清楚:"不能创建抽象类"。

为什么尝试创建这个类的实例?您说您想调用一个方法,但是为什么您认为这需要创建一个实例呢?即使可以创建新实例,也不应该为了调用静态方法而这样做。我假设该方法是静态的,否则它就不能放在静态类中…

当你使用反射时,你应该仔细考虑你想要做什么——因为编译器将无法发现你在做一些不合理的事情。如果没有反射,它将能够:
// Fails at compile-time
new ClassLibrary1.Class1().WhateverMethod();

当你使用反射时,你需要像编译器一样思考——因为编译器不能为你做这件事。

相关文章: