您的位置:首页 > 运维架构

反射:PropertyInfo、FieldInfo和MemberInfo的区别

2017-09-20 19:52 369 查看
第一次去了解反射中的各个类,暂时先从这几个类进行区分。

首先新建一个类:

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

根据反射三者都能获取到自定义的特性及其配置
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: