c# - 在构造函数之前设置字段或属性值

标签 c# reflection

是否可以在类的构造函数之前为字段或属性赋值并使用反射?

谢谢

最佳答案

是的,有一种偷偷摸摸的方法可以做到这一点。秘诀是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; }
}

关于c# - 在构造函数之前设置字段或属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40700550/

相关文章:

c# - 限制 wpf 中的附加依赖属性

c# - Interface的类成员和基类

c# - 为什么使用 AsQueryable() 而不是 List()?

c# - 从 Assembly.GetTypes() 获取的类型的顺序

scala - 缺少序列化程序时,密封特征和对象枚举的快速 json4s 序列化

c# - FastMember 用法

c# - SQL Server - 重用以前的查询 - 与 Linq 类似的逻辑

C#/LINQ 比较两个列表和赋值的最快方法

java - 如何从 Java 8 中的 getAnnotatedParameterTypes() 获取泛型类型信息?

java - 确定静态方法是否是纯函数式的