4

我试图强制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

这似乎很奇怪。这种行为是否有任何记录在案的原因?

调用可能带有许多可选参数的构造函数的正确方法是什么?

4

0 回答 0