使用反射实例化内部类中带有参数的构造函数
我有一些类似的东西:
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’的构造方法。
有任何想法吗?
回答:
问题是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)
以上是 使用反射实例化内部类中带有参数的构造函数 的全部内容, 来源链接: utcz.com/qa/417819.html