使用type.GetProperty()获取不到私有属性,看图。

丶爱拼才会赢 2017-12-08 10:25:09
这里是获取私有属性的代码,其中propertyname = "PageCount" ,。现象是:这里的field一直获取不到,报空。
对于访问修饰符为protected的属性,却能使用上面图片中的代码获取到。有没有大神知道是为什么。帮帮,搞了很长时间了。
不咋用这个,分不多。。。 抱歉
...全文
319 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuganlg 2019-02-14
  • 打赏
  • 举报
回复 1
我也出现了这个问题,后来我自己又写了个类测试访问私有属性,发现就你的这种方法是可以访问的,然后我就琢磨了一下,发现我出现问题的这个类是一个代理类,里面没有那个private私有字段,或者说是继承自父类的,所以发现不了。建议你要么改为protected,要么使用原type.BaseType.GetFields。
圣殿骑士18 2017-12-08
  • 打赏
  • 举报
回复
为什么要加BindingFlags.Instance参数,可以参见: https://msdn.microsoft.com/zh-cn/library/cexkb29a 其中有讲: 必须指定Instance或Static连同Public或NonPublic或将返回没有成员。 You must specify Instance or Static along with Public or NonPublic or no members will be returned.
圣殿骑士18 2017-12-08
  • 打赏
  • 举报
回复
同样的: var propInfo = ty.GetProperty("LineCount", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
丶爱拼才会赢 2017-12-08
  • 打赏
  • 举报
回复
受保护类型的属性,如下图 现象是受保护类型的属性能获取到,私有属性却一直为空。
丶爱拼才会赢 2017-12-08
  • 打赏
  • 举报
回复
这里是获取私有属性的代码。 这里是私有属性的定义。 现在就是通过获取属性的代码,获取该私有属性一直获取不到。一直为空。
  • 打赏
  • 举报
回复
你能贴出你相对完整的实例吗?
  • 打赏
  • 举报
回复
属性,字段是两回事
丶爱拼才会赢 2017-12-08
  • 打赏
  • 举报
回复
应该不是字段和属性的原因吧。 这里的LineCount使用PropertyInfo field = type.GetProperty(propertyname, flag) 却能获取到。。
圣殿骑士18 2017-12-08
  • 打赏
  • 举报
回复
PageCount是字段,不是属性。 使用: type.GetField(propName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
丶爱拼才会赢 2017-12-08
  • 打赏
  • 举报
回复
可以看到, PageCount定义的是私有属性。 定义的另外一个protected属性的值却能获取到,百思不得其解。。

110,538

社区成员

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

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

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