反射:PropertyInfo、FieldInfo和MemberInfo的区别 反射:PropertyInfo、FieldInfo和MemberInfo的区别

反射:PropertyInfo、FieldInfo和MemberInfo的区别

第一次去了解反射中的各个类,暂时先从这几个类进行区分。

首先新建一个类:

其中包括:私有字段 a=1,公共字段 b=3 ,公共属性 A=2

[csharp]  view plain  copy
  1.     public class myClass  
  2.     {  
  3.         private int a = 1;  
  4.         [Description("2描述")]  
  5.         public int A { getset; } = 2;  
  6.         [Description("3描述")]  
  7.         public int b=3;  
  8.     }  
接下来在控制台程序中写入:

获取到myClass的PropertyInfo[]、FieldInfo[]和MemberInfo[]

并对这些类数组进行循环输出,查看获取到的元素是什么

[csharp]  view plain  copy
  1.             myClass aa = new myClass();  
  2.             PropertyInfo[] pro = aa.GetType().GetProperties();  
  3.             FieldInfo[] fil = aa.GetType().GetFields();  
  4.             MemberInfo[] men = aa.GetType().GetMembers();  
  5.             foreach (var item in pro)  
  6.         {  
  7.             Console.WriteLine(item.GetValue(aa) + "|" + item.Name+"|"+(item.GetCustomAttributes(typeof(DescriptionAttribute),false).First() as DescriptionAttribute).Description);  
  8.         }  
  9.         Console.WriteLine("FieldInfo的循环");  
  10.         foreach (FieldInfo item in fil)  
  11.             {  
  12.               Console.WriteLine(item.GetValue(aa) + "|" + item.Name+"|"+(item.GetCustomAttributes(typeof(DescriptionAttribute)).First() as DescriptionAttribute).Description);  
  13.         }  
  14.         Console.WriteLine("MemberInfo的循环");  
  15.         foreach (MemberInfo item in fil)  
  16.         {  
  17.             Console.WriteLine("|" + item.Name+"|"+ (item.GetCustomAttributes(typeof(DescriptionAttribute)).First() as DescriptionAttribute).Description);  
  18.         }  
输出结果如下:

PropertyInfo的循环

2|A|2描述

FieldInfo的循环

3|b|3描述

MemberInfo的循环

|b|3描述
结论:PropertyInfo获取到公共属性 A=3,FieldInfo获取到公共字段 b=3,MemberInfo[]获取到b

根据反射三者都能获取到自定义的特性及其配置

猜你喜欢

转载自blog.csdn.net/linuxheik/article/details/80359356