数据反映
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;
}
很简单。如果您有像本例中那样的实例,则需要使用 typeof
或 GetType()
获取目标对象的类型。然后您可以使用 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;
}
如何读取任何对象及其私有字段然后返回
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;
}
很简单。如果您有像本例中那样的实例,则需要使用 typeof
或 GetType()
获取目标对象的类型。然后您可以使用 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;
}