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类代码中的任何东西都可能导致这种异常吗?
你想做什么:
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();
当你使用反射时,你需要像编译器一样思考——因为编译器不能为你做这件事。