使用反射在“this”类中查找私有字段,并将其实例化



假设情况。假设我有一个包含许多私人领域的班级。我希望它以正确的type实例化它可以找到的每个字段。到目前为止,我已经使用

public class TestClass
{
    private SomeClass sc;
    private AnotherClass ac;
    public TestClass()
    {
        var type = GetType();
        var fields = type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance)
            .Select(x => x.Name)
            .ToList();
        foreach (var f in fields)
            type.GetField(f).SetValue(/*instantiate here*/);
    }
}

如何实例化它?(这是假设每个类中的new()构造函数是无参数的并且不为空(

Activator.CreateInstance(Type)可以从该类型创建实例。这需要一个无参数的构造函数(参数有重载(。

要使用它,只需稍微修改一下您的代码:

public class TestClass
{
    private SomeClass sc;
    private AnotherClass ac;
    public TestClass()
    {
        var type = GetType();
        type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance)
            .ToList()
            .ForEach(f => {
                f.SetValue(this, Activator.CreateInstance(f.FieldType);
            });
    }
}

最新更新