反射能否得到私有属性和方法?

jiioeri 2015-07-08 09:22:30
如果默认不能的话,是不是要给类定义加上什么Attribute才能让保护成员和私有成员被反射出来?
我做了下面的一个简单的实验:

public class CA
{
private void f()
{
}
public string _name = "myname";
public int _num = 94;
//[System.Xml.Serialization.XmlIgnore]
public string _city = "tianjin";
public CB b = new CB();
[NonSerialized]//对XmlSerializer无效
private string _address = "bohai";
public string name { get { return _name; } set { _name = value; } }
}

var t = typeof (CA);
foreach (var m in t.GetMethods())
{
Console.WriteLine(m.Name);
}

上面这一段程序的输出是:

get_name
set_name
ToString
Equals
GetHashCode
GetType
Press any key to continue . . .

没有私有函数f。这个是反射本身的限制呢,还是可以通过设置某些Attribute来得到呢?
...全文
723 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fontain2 2015-07-10
  • 打赏
  • 举报
回复
都是一群不看帮助的人
fontain2 2015-07-10
  • 打赏
  • 举报
回复
为了获取返回值,必须指定 BindingFlags.Instance 或 BindingFlags.Static。 指定 BindingFlags.Public 可在搜索中包含公共方法。 指定 BindingFlags.NonPublic 可在搜索中包含非公共方法(即私有方法、内部方法和受保护的方法)。 只返回基类上的受保护方法和内部方法;不返回基类上的私有方法。 指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 public 和 protected 静态成员;不包括继承类中的 private 静态成员。
fontain2 2015-07-10
  • 打赏
  • 举报
回复
var t = typeof(CA); foreach (var m in t.GetMethods(BindingFlags.Instance|BindingFlags.NonPublic)) { Console.WriteLine(m.Name); } Console.ReadKey();
zhifanlight 2015-07-10
  • 打赏
  • 举报
回复
getDeclaredMethods可以获取私有方法,getDeclaredFields可以获取私有属性
jiioeri 2015-07-10
  • 打赏
  • 举报
回复
求回答!......
jiioeri 2015-07-09
  • 打赏
  • 举报
回复
我把main函数的代码改成了下面这样:

        var t = typeof(CA);
        foreach (var m in t.GetMethods(BindingFlags.NonPublic))
        {
            Console.WriteLine(m.Name);
        }
这次什么都不打印了,没有我想要的私有方法f
  • 打赏
  • 举报
回复
能。 你的 t.GetMethods() 语句缺少必要的参数。参数才能说明另外许多种反射成员的方法选项。 但是程序设计中,尽量不要反射。要使用正规的接口定义方式。
caoqinghua 2015-07-09
  • 打赏
  • 举报
回复
继承这个类,并包装出私有成员.
南天空 2015-07-08
  • 打赏
  • 举报
回复
GetMethod获取的是公共方法,私有方法需要改成公共方法
showjim 2015-07-08
  • 打赏
  • 举报
回复
BindingFlags.NonPublic
smthgdin_020 2015-07-08
  • 打赏
  • 举报
回复
属性和字段类似,getproperty,getfield这样。
smthgdin_020 2015-07-08
  • 打赏
  • 举报
回复
GetMethods获取的是公共方法。MethodInfo method = xxxx.GetMethod(name, BindingFlags.NonPublic);
  • 打赏
  • 举报
回复
GetMethods看下带参数的方法
  • 打赏
  • 举报
回复
既然是私有的,那就肯定就是不希望被暴露的咯

110,533

社区成员

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

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

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