反射问题:GetField方法获取私有字段成员

品铭工作室 2007-01-10 08:34:31
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的值,那里有问题呢?
...全文
1550 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackiepan_2003 2007-01-31
  • 打赏
  • 举报
回复
二楼对的
liujia_0421 2007-01-11
  • 打赏
  • 举报
回复
为了获取返回值,必须指定 BindingFlags.Instance 或 BindingFlags.Static。

指定 BindingFlags.Public 可在搜索中包含公共字段。

指定 BindingFlags.NonPublic 可在搜索中包含非公共字段(即私有字段和受保护的字段)。

指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 public 和 protected 静态成员;不包括继承类中的 private 静态成员。

losedxyz 2007-01-11
  • 打赏
  • 举报
回复
mark
兔子-顾问 2007-01-11
  • 打赏
  • 举报
回复
up
ilove8 2007-01-11
  • 打赏
  • 举报
回复
楼上已给出
juqiang 2007-01-11
  • 打赏
  • 举报
回复
兄弟,你的代码怎么这么多小毛病?没有冒号,变量错误等。下面这个例子可以跑:

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这个标记
品铭工作室 2007-01-10
  • 打赏
  • 举报
回复
lll

110,565

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧