博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反射之取类中类的属性、变量名称及其值
阅读量:5137 次
发布时间:2019-06-13

本文共 3376 字,大约阅读时间需要 11 分钟。

类中类

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Reflection; 5 using System.Text; 6 using System.Threading.Tasks; 7  8 namespace 二重类嵌套取内层的属性变量名 9 {10     public class Pro111     {12         string name="张三";13         int no=101;14         bool flag=false;15     }16     public class Pro217     {        18         Pro1 pro0 = new Pro1();19     }20     public class Program21     {22         static void Main(string[] args)23         {24              Pro2 p2 = new Pro2();//两重嵌套时  25       FieldInfo fi2 = p2.GetType().GetField("pro0", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);26             object p1 = fi2.GetValue(p2);27             FieldInfo fi1 = p1.GetType().GetField("name", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);28             string strName = fi1.GetValue(p1).ToString();//内层的属性及其属性的值29          }30      }31 }
View Code

多重类嵌套时

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Reflection; 5 using System.Text; 6 using System.Threading.Tasks; 7  8 namespace 三重类嵌套取内层的属性变量名 9 {10     public class Pro111     {12         string name="张三";13         int no=101;14         bool flag=false;15     }16     public class Pro217     {        18         Pro1 pro0 = new Pro1();19         Pro1 pro1 = new Pro1();20         Pro1 pro2 = new Pro1();21         Pro1 pro3 = new Pro1();22         Pro1 pro4 = new Pro1();23         Pro1 pro5 = new Pro1();24         Pro1 pro6 = new Pro1();25         Pro1 pro7 = new Pro1();26         Pro1 pro8 = new Pro1();27         Pro1 pro9 = new Pro1();28         Pro1 pro10 = new Pro1();29         Pro1 pro11 = new Pro1();30         Pro1 pro12 = new Pro1();31         Pro1 pro13 = new Pro1();32     }33 34     public class Pro335     {36         Pro2 pro2 = new Pro2();37     }38         39     public class Program40     {41         static void Main(string[] args)42         {43             44             Pro3 p3 = new Pro3();//三重嵌套45             List
ListStrP2 = new List
();46 //为了获取返回值,必须指定 BindingFlags.Instance 或 BindingFlags.Static。 47 48 //指定 BindingFlags.Public 可在搜索中包含公共字段。 49 50 //指定 BindingFlags.NonPublic 可在搜索中包含非公共字段(即私有字段和受保护的字段)。 51 52 //指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 public 和 protected 静态成员;不包括继承类中的 private 静态成员。 53 54 //综合,通过中间层的遍历,循环取最内层的字段及其字段值55 FieldInfo fi3 = p3.GetType().GetField("pro2", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);// 不关注父类中成员 :bindingflags.declaredonly 56 object p2 = fi3.GetValue(p3);57 FieldInfo[] arrayfi2 = p2.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);58 for (int i =0; i < arrayfi2.Length; i++)59 {60 object p2i=p2.GetType().GetField(arrayfi2[i].Name, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).GetValue(p2);61 62 ListStrP2.Add(p2i.GetType().GetField("name", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).GetValue(p2i).ToString());63 Console.WriteLine(i+"、"+ListStrP2[i]);64 } 65 }66 }67 }
View Code

 

转载于:https://www.cnblogs.com/5696-an/p/5533310.html

你可能感兴趣的文章
20几个正则常用正则表达式
查看>>
TextArea中定位光标位置
查看>>
非常棒的Visual Studo调试插件:OzCode 2.0 下载地址
查看>>
判断字符串在字符串中
查看>>
hdu4374One hundred layer (DP+单调队列)
查看>>
类间关系总结
查看>>
properties配置文件读写,追加
查看>>
Linux环境下MySql安装和常见问题的解决
查看>>
lrzsz——一款好用的文件互传工具
查看>>
ZPL语言完成条形码的打印
查看>>
这20件事千万不要对自己做!
查看>>
Linux环境下Redis安装和常见问题的解决
查看>>
HashPump用法
查看>>
cuda基础
查看>>
Vue安装准备工作
查看>>
.NET 母版页 讲解
查看>>
oracle 创建暂时表
查看>>
201421410014蒋佳奇
查看>>
Xcode5和ObjC新特性
查看>>
jvm slot复用
查看>>