使用反射在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并显示消息“

为此对象未定义无参数构造函数。 ”是否还有其他方法可以创建此类型的实例?将无参数的构造函数添加到我的所有类中有点麻烦。

回答:

我最初将这个答案发布在这里,但是这里是转载,因为这不是完全相同的问题,但是答案相同:

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#中创建没有默认构造函数的类型实例 的全部内容, 来源链接: utcz.com/qa/428961.html

回到顶部