在C#中使用反射创建没有默认构造函数的类型的实例

以下面的类为例:

class Sometype
{
    int someValue;

    public Sometype(int someValue)
    {
        this.someValue = someValue;
    }
}

然后我想使用反射创建这种类型的实例:

Type t = typeof(Sometype);
object o = Activator.CreateInstance(t);

通常这将工作,但是因为SomeType没有定义一个无参数的构造函数,对Activator.CreateInstance的调用将抛出一个类型MissingMethodException的异常,消息“没有为此对象定义无参数的构造函数”。有没有另一种方法仍然创建这种类型的实例?对我所有的类添加无参参数的构造函数会很有趣。

最佳答案
我原来发布这个答案here,但这里是一个重印,因为这不是完全相同的问题,但有相同的答案:

FormatterServices.GetUninitializedObject()将创建一个实例而不调用构造函数。我发现这个类通过使用Reflector和挖掘一些核心.Net序列化类。

我使用下面的示例代码测试它,它看起来像它的工作伟大:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Runtime.Serialization;

namespace NoConstructorThingy
{
    class Program
    {
        static void Main(string[] args)
        {
            MyClass myClass = (MyClass)FormatterServices.GetUninitializedObject(typeof(MyClass)); //does not call ctor
            myClass.One = 1;
            Console.WriteLine(myClass.One); //write "1"
            Console.ReadKey();
        }
    }

    public class MyClass
    {
        public MyClass()
        {
            Console.WriteLine("MyClass ctor called.");
        }

        public int One
        {
            get;
            set;
        }
    }
}

转载注明原文:在C#中使用反射创建没有默认构造函数的类型的实例 - 代码日志