反射问题:GetField方法获取私有字段成员
class classMe
{ string str = "AAAA "}
static void Main(string[] args)
{
classMe me = new classMe() ;
FieldInfo fieldInfo = ty.GetFields( "str " ,BindingFlags.NonPublic|BindingFlags.GetField) ;
Console.WriteLine( fieldInfo.GetValue(me) );
}
但这里却无法得到str的值,那里有问题呢?
------解决方案--------------------兄弟,你的代码怎么这么多小毛病?没有冒号,变量错误等。下面这个例子可以跑:
using System;
using System.Text;
using System.Reflection;
namespace TestTest
{
class classMe
{ string str = "AAAA ";}
class Programs
{
static void Main(string[] args)
{
classMe me = new classMe();
Type t = me.GetType();
FieldInfo fieldInfo = t.GetField( "str ", BindingFlags.Instance | BindingFlags.GetField | BindingFlags.IgnoreCase | BindingFlags.NonPublic);
Console.WriteLine(fieldInfo.GetValue(me));
}
}
}
你的少了BindingFlags.Instance这个标记
------解决方案--------------------为了获取返回值,必须指定 BindingFlags.Instance 或 BindingFlags.Static。
指定 BindingFlags.Public 可在搜索中包含公共字段。
指定 BindingFlags.NonPublic 可在搜索中包含非公共字段(即私有字段和受保护的字段)。
指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 public 和 protected 静态成员;不包括继承类中的 private 静态成员。