数据反映

Reflection of data

如何读取任何对象及其私有字段然后返回

public class Person
{
    private string _password;


    }

    public string Name { get; set }

    public Gender man { get; set }

    public int Age { get; set }
}

这是您必须从中获取数据的class

首先获取对象 Type,然后获取其具有给定名称的非 public 实例字段。 然后您可以从对象中获取值。示例:

public static string ReadPrivateField<T>(T obj, string fieldName)
{
    var type = typeof(T);
    var field = type.GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance);
    var value = field.GetValue(obj);
    return value as string;
}

很简单。如果您有像本例中那样的实例,则需要使用 typeofGetType() 获取目标对象的类型。然后您可以使用 GetField 来获取所需的字段。但是有一个问题! GetField 默认情况下仅搜索 public 和非静态字段。要更改,您需要给它一些 BindingFlags。一个例子:

public static string ReadPrivateField(object obj, string fieldName)
{
    var type = obj.GetType();
    // NonPublic = obly search for private fields.
    // Instance = only search for non-static fields.
    var field = type.GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance);
    return field.GetValue(obj) as string;
}