有类如下:class a
{
     public string atext = "atext";
     class b
     {
         public string btext = "btext";
     }
}
如何通过反射访问b.btext?

解决方案 »

  1.   

    需要指出的是,class b是独立的。
    当创建一个a的实例的时候,并不会创建一个b的实例,所以根本不存在btext。要反射访问b.btext并没有什么特别。
    string s = typeof(a.b).GetFields(x => x.Name == "btext").First().GetValue();
      

  2.   

    楼主可以使用namespace来管理class
      

  3.   

    感谢两位朋友的指点,我表达有误。
    我的目的是遍历a中的嵌套类成员,而事前只知道其接口不知道其名称。我找到合适的方法了:
    Type a_type = typeof(a);
    MemberInfo [] info = a_type.GetNestedTypes(BindingFlags.Public | BindingFlags.Instance);//通过GetNestedTypes方法获取嵌套类信息
    foreach(var ns in info)
    {
         FieldInfo fi = ns.GetFields("btext");
         //实例化b,ns是a的嵌套类成员,如果btext是静态成员则无需实例化,可直接引用
         object ns_obj = Activator.CreateInstance(ns);
         //如果btext是静态成员,则可以ns.GetValue(ns)
         Console.WriteLine("a.b.btext = " + ns.GetValue(ns_obj));
    }
      

  4.   

    有个地方打错了,最后一行应为:
    Console.WriteLine("a.b.btext = " + fi.GetValue(ns_obj));