我试图强制Activator.CreateInstance
使用带有默认参数的构造函数。
我发现了这个建议,在 SO(第一条评论)上重复了几次http://connect.microsoft.com/VisualStudio/feedback/details/521722/system-activator-createinstance-throws-system-missingmethodexception-with-constructor-包含可选参数
我想在 Mono 上运行它,但它不起作用,抛出一个MissingMethodException
. 在提交错误之前,我在 .NET 4.5 上做了一个实验:
class Program
{
static void Main(string[] args)
{
new A();
Activator.CreateInstance(typeof(A),
BindingFlags.CreateInstance
| BindingFlags.Public
| BindingFlags.Instance
| BindingFlags.OptionalParamBinding,
null, new Object[] {Type.Missing}, null);
}
}
class A
{
public A()
{
Console.WriteLine("First");
}
public A(int i = 5)
{
Console.WriteLine("Second");
}
}
当然,结果是可以预料的:
First
Second
然后我尝试删除Type.Missing
参数以查看会发生什么,希望找到一种方法来调用具有不同数量默认参数的构造函数。
看到什么都没有改变,我大吃一惊!通过传递,new Object[]{}
我期望:
First
First
想知道 Type.Missing 做了什么,天哪!为什么在 Internet 上的示例中提到它,我已经更改了框架。
在 .NET 4.0 上是一样的,但在 .NET 3.5 上结果是
First
First
这似乎很奇怪。这种行为是否有任何记录在案的原因?
调用可能带有许多可选参数的构造函数的正确方法是什么?