使用反射在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