在运行时使用内部构造函数实例化类
本文关键字:构造函数 实例化 内部 运行时 | 更新日期: 2023-09-27 18:31:51
我在命名空间Foobar
中有一个名为 Giggles
的类。同一命名空间中的另一个类称为 Monkey
。它们都在同一个程序集中。
Monkey
看起来像这样:
namespace Foobar {
public class Monkey {
internal Monkey () { }
...
这是Monkey
唯一的构造函数,我无法更改其源代码。
现在,从 Giggles
中的一个方法中,我想使用包含其类名的字符串实例化Monkey
。
这不起作用:
var className = "Foobar.Monkey";
var monkley = Assembly.GetExecutingAssembly().CreateInstance(className);
给出以下异常消息:异常类型为 System.MissingMethodException
的"Constructor on type 'Foobar.Monkey' not found."
。
有什么想法吗?
您可以尝试使用具有适当绑定标志的 Type.GetConstructors
/* bindings are: non public and instance to find an internal ctor */
ConstructorInfo monkeyCtor = typeof(Monkey).GetConstructors
(BindingFlags.Instance | BindingFlags.NonPublic)[0];
/* actual invokation of constructor*/
Monkey monkeyInstance = (Monkey ) monkeyCtor.Invoke(...);
这应该适合您。