是的,有一种偷偷摸摸的方式来做到这一点.秘诀是FormatterServices.GetUninitializedObject,它将分配一个实例但不运行构造函数.您可以通过反射设置字段和属性,然后运行构造函数.
一个简单的例子:
class Program
{
static void Main(string[] args)
{
object obj = FormatterServices.GetUninitializedObject(typeof(A));
obj.GetType().GetProperty("I").SetValue(obj, 1);
obj.GetType().GetConstructor(Type.EmptyTypes).Invoke(obj, null);
Console.WriteLine("Done");
}
}
class A
{
public A()
{
if (I != 0)
{
Console.WriteLine("Who set me? I = {0}", I);
}
}
public int I { get; set; }
}
Run Code Online (Sandbox Code Playgroud)