一尘不染

使用反射实例化内部类中带有参数的构造函数

c#

我有一些类似的东西:

object[] parameter = new object[1];
parameter[0] = x;
object instantiatedType =
Activator.CreateInstance(typeToInstantiate, parameter);

internal class xxx : ICompare<Type>
{
    private object[] x;

    # region Constructors

    internal xxx(object[] x)
    {
        this.x = x;
    }

    internal xxx()
    {
    }

    ...
}

我得到:

引发异常:System.MissingMethodException:找不到类型为’xxxx.xxx’的构造方法。

有任何想法吗?


阅读 511

收藏
2020-05-19

共1个答案

一尘不染

问题是Activator.CreateInstance(Type, object[])不考虑非公共构造函数。

例外情况

MissingMethodException:找不到匹配的公共构造函数。

通过将构造函数更改为public可见性可以很容易地看出这一点。该代码然后可以正常工作。

这是一种变通方法(已测试):

 BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Instance;
 CultureInfo culture = null; // use InvariantCulture or other if you prefer
 object instantiatedType =   
   Activator.CreateInstance(typeToInstantiate, flags, null, parameter, culture);

如果仅需要无参数构造函数,则此方法也将起作用:

//using the overload: public static object CreateInstance(Type type, bool nonPublic)
object instantiatedType = Activator.CreateInstance(typeToInstantiate, true)
2020-05-19