反射:PropertyInfo、FieldInfo和MemberInfo的区别

来源:互联网 发布:淘宝订单系统设计 编辑:程序博客网 时间:2024/05/22 04:37

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

首先新建一个类:

其中包括:私有字段 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

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



阅读全文
0 0