以下面的类为例:
class Sometype { int someValue; public Sometype(int someValue) { this.someValue = someValue; } }
然后,我想使用反射创建此类型的实例:
Type t = typeof(Sometype); object o = Activator.CreateInstance(t);
通常这是可行的,但是由于SomeType尚未定义无参数构造函数,因此对的调用Activator.CreateInstance将引发类型异常,MissingMethodException并显示消息“ 为此对象未定义无参数构造函数。 ”是否还有其他方法可以创建此类型的实例?将无参数的构造函数添加到我的所有类中有点麻烦。
SomeType
Activator.CreateInstance
MissingMethodException
我最初将这个答案发布在这里,但是这里是转载,因为这不是完全相同的问题,但是答案相同:
FormatterServices.GetUninitializedObject()将创建实例而不调用构造函数。我通过使用Reflector并深入研究了一些核心.Net序列化类来找到此类。
FormatterServices.GetUninitializedObject()
我使用下面的示例代码对其进行了测试,看起来效果很好:
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; } } }