在运行时使用内部构造函数实例化类

本文关键字:构造函数 实例化 内部 运行时 | 更新日期: 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(...);

这应该适合您。