反射:PropertyInfo、FieldInfo和MemberInfo的区别
第一次去了解反射中的各个类,暂时先从这几个类进行区分。
首先新建一个类:
其中包括:私有字段 a=1,公共字段 b=3 ,公共属性 A=2
- public class myClass
- {
- private int a = 1;
- [Description("2描述")]
- public int A { get; set; } = 2;
- [Description("3描述")]
- public int b=3;
- }
获取到myClass的PropertyInfo[]、FieldInfo[]和MemberInfo[]
并对这些类数组进行循环输出,查看获取到的元素是什么
- myClass aa = new myClass();
- PropertyInfo[] pro = aa.GetType().GetProperties();
- FieldInfo[] fil = aa.GetType().GetFields();
- MemberInfo[] men = aa.GetType().GetMembers();
- foreach (var item in pro)
- {
- Console.WriteLine(item.GetValue(aa) + "|" + item.Name+"|"+(item.GetCustomAttributes(typeof(DescriptionAttribute),false).First() as DescriptionAttribute).Description);
- }
- Console.WriteLine("FieldInfo的循环");
- foreach (FieldInfo item in fil)
- {
- Console.WriteLine(item.GetValue(aa) + "|" + item.Name+"|"+(item.GetCustomAttributes(typeof(DescriptionAttribute)).First() as DescriptionAttribute).Description);
- }
- Console.WriteLine("MemberInfo的循环");
- foreach (MemberInfo item in fil)
- {
- Console.WriteLine("|" + item.Name+"|"+ (item.GetCustomAttributes(typeof(DescriptionAttribute)).First() as DescriptionAttribute).Description);
- }
PropertyInfo的循环
2|A|2描述
FieldInfo的循环
3|b|3描述
MemberInfo的循环
|b|3描述
结论:PropertyInfo获取到公共属性 A=3,FieldInfo获取到公共字段 b=3,MemberInfo[]获取到b
根据反射三者都能获取到自定义的特性及其配置