反射:PropertyInfo、FieldInfo和MemberInfo的区别
2017-09-20 19:52
369 查看
第一次去了解反射中的各个类,暂时先从这几个类进行区分。
首先新建一个类:
其中包括:私有字段 a=1,公共字段 b=3 ,公共属性 A=2
获取到myClass的PropertyInfo[]、FieldInfo[]和MemberInfo[]
并对这些类数组进行循环输出,查看获取到的元素是什么
PropertyInfo的循环
2|A|2描述
FieldInfo的循环
3|b|3描述
MemberInfo的循环
|b|3描述
结论:PropertyInfo获取到公共属性 A=3,FieldInfo获取到公共字段 b=3,MemberInfo[]获取到b
根据反射三者都能获取到自定义的特性及其配置
首先新建一个类:
其中包括:私有字段 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
根据反射三者都能获取到自定义的特性及其配置
相关文章推荐
- 在Reflection中,PropertyInfo和FieldInfo有什么区别?
- Java 反射机制中 getMethod()和getDeclaredField()区别
- FieldInfo.IsSpecialName Property【转】
- AccessType.PROPERTY和AccessType.FIELD的区别
- Java 反射机制中 getMethod()和getDeclaredField()区别
- Java 反射机制中 getMethod()和getDeclaredField()区别
- java反射中getDeclaredField和getField的区别
- 简述Field,Attribute,Property的区别
- 反射可以通过FieldInfo.SetValue设置任何字段的值
- Java 反射机制中 getMethod()和getDeclaredField()区别
- 在反射中Member{get{..}set{..}}与Member{get;set;}的区别?
- c#中字段(field)和属性(property)的区别
- property和field有什么区别
- Java反射之getDeclaredField和getField的区别
- AccessType.PROPERTY和AccessType.FIELD的区别
- 【C#】-属性(Property)和字段(Field)的区别
- C# 属性(Property)和字段(Field)的区别
- java field, property,variable及getField和getDeclaredField的区别
- Hibernate AccessType.PROPERTY和AccessType.FIELD的区别
- 错误:Property or field 'default' cannot be found on object of type 'com.netflix.appinfo.InstanceInfo'