C# 数据的反映
如何读取并返回任何对象及其私有字段C# 数据的反映,c#,reflection,private-methods,C#,Reflection,Private Methods,如何读取并返回任何对象及其私有字段 public class Person { private string _password; } public string Name { get; set } public Gender man { get; set } public int Age { get; set } } 这里是您必须从中获取数据的类首先获取对象类型,然后获取其具有给定名称的非公共实例字段。 然后可以从对象中获取值。例如: pub
public class Person
{
private string _password;
}
public string Name { get; set }
public Gender man { get; set }
public int Age { get; set }
}
这里是您必须从中获取数据的类首先获取对象
类型
,然后获取其具有给定名称的非公共实例字段。
然后可以从对象中获取值。例如:
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;
}
公共静态字符串ReadPrivateField(T obj,字符串字段名)
{
var类型=类型(T);
var field=type.GetField(fieldName,BindingFlags.NonPublic | BindingFlags.Instance);
var值=字段。获取值(obj);
以字符串形式返回值;
}
首先获取对象类型
,然后获取具有给定名称的非公共实例字段。
然后可以从对象中获取值。例如:
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;
}
公共静态字符串ReadPrivateField(T obj,字符串字段名)
{
var类型=类型(T);
var field=type.GetField(fieldName,BindingFlags.NonPublic | BindingFlags.Instance);
var值=字段。获取值(obj);
以字符串形式返回值;
}
这很简单。如果有这样的实例,则需要使用typeof
或GetType()
获取目标对象的类型。然后可以使用GetField
获取所需字段。但有一个陷阱GetField
默认情况下仅搜索公共和非静态字段。要更改,您需要给它一些BindingFlags
。例如:
publicstaticstringreadprivateField(objectobj,stringfieldname)
{
var type=obj.GetType();
//NonPublic=obly搜索私有字段。
//实例=仅搜索非静态字段。
var field=type.GetField(fieldName,BindingFlags.NonPublic | BindingFlags.Instance);
返回字段.GetValue(obj)作为字符串;
}
这很简单。如果有这样的实例,则需要使用typeof
或GetType()
获取目标对象的类型。然后可以使用GetField
获取所需字段。但有一个陷阱GetField
默认情况下仅搜索公共和非静态字段。要更改,您需要给它一些BindingFlags
。例如:
publicstaticstringreadprivateField(objectobj,stringfieldname)
{
var type=obj.GetType();
//NonPublic=obly搜索私有字段。
//实例=仅搜索非静态字段。
var field=type.GetField(fieldName,BindingFlags.NonPublic | BindingFlags.Instance);
返回字段.GetValue(obj)作为字符串;
}
你需要在ReadPrivateField
我猜:)如果你问你是否可以将支持字段添加到属性中,你只能使用自动实现的属性,否则它可能是任何东西,即使这样,我想这也可能是偶然的,我该怎么做?查看更新。BindingFlags.NonPublic | BindingFlags.Static
——这是在寻找一个静态字段,但您的\u password
字段是一个实例字段。您需要在ReadPrivateField
中放入内容(我猜:)如果您询问是否可以将支持字段获取到属性,你只能用一个自动实现的属性来实现它,否则它可能是任何东西,即使这样,这也可能是命中或未命中的im thinkingOkay,我该怎么做?查找更新。BindingFlags.NonPublic | BindingFlags.Static
——这是在查找静态字段,但您的\u密码
字段是一个实例字段。