我试图强制Activator.CreateInstance
使用带默认参数的构造函数。
我发现了这个建议,在SO上重复了几次(第一条评论)http://connect.microsoft.com/VisualStudio/feedback/details/521722/system-activator-createinstance-throws-system-missingmethodexception-with-constructor-containing-an-optional-parameter
我想在Mono上运行它并且它不起作用,抛出MissingMethodException
。在提交bug之前,我已经在.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做了什么,并且,通过golly!,为什么在互联网的例子中提到它,我改变了框架。
在.NET 4.0上它是相同的,但在.NET 3.5上,结果是
First
First
这看起来很奇怪。这种行为有记录的原因吗?
使用可能的许多可选参数调用构造函数的正确方法是什么?