100分求反射问题,如何连父类的私有属性也反射出来

游离失所 2014-07-11 05:31:52


public class A
{
private string Name;
}
public class B : A
{
private int age;
}
protected void Page_Load(object sender, EventArgs e)
{
var a = typeof(B).GetFields(BindingFlags.NonPublic | BindingFlags.Instance).ToArray();
}


这里我只能获取到B的私有字段age。。

以前用反射。父类的属性/字段都会出来,但前提是共有的。。这下不行了。。求解决
...全文
271 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcmakebest 2014-07-11
  • 打赏
  • 举报
回复
动手能力稍强一些就找到了:
Type t = typeof(B);
var b = t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance).ToArray();

t = t.BaseType;
var a = t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance).ToArray();
threenewbee 2014-07-11
  • 打赏
  • 举报
回复
没看清楚,是这样的,private不能被继承。 你可以不断循环找基类,这个代码使用了类似的方法: http://blog.sina.com.cn/s/blog_497dbcd10100f8px.html Type type = request.GetType(); //获得请求的类型 while ((type != null) && (type.FullName != "System.Web.Hosting.ISAPIWorkerRequest")) { type = type.BaseType; }
threenewbee 2014-07-11
  • 打赏
  • 举报
回复
关键就是BindingFlags.NonPublic | BindingFlags.Instance 3L回答正确。
游离失所 2014-07-11
  • 打赏
  • 举报
回复


 Type thisType = typeof(B);
            ArrayList list = new ArrayList();
            while (thisType.IsSubclassOf(typeof(object)))
            {
                list.AddRange(thisType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance));
                thisType = thisType.BaseType;
            }
只能这样了。。妈的
游离失所 2014-07-11
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
你得反射父类的类型才行,或者循环反射个各类,参考 http://bbs.csdn.net/topics/90141299 10楼解答
看过了。行不太通,他会把当前程序集里的所有东西都获取到
bdmh 2014-07-11
  • 打赏
  • 举报
回复
你得反射父类的类型才行,或者循环反射个各类,参考 http://bbs.csdn.net/topics/90141299 10楼解答

111,092

社区成员

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

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

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