一、C# 反射(refection)基础概念
反射指程序可以访问、检测和修改它本身状态或行为的一种能力。
程序集包含模块,而模块包含类型,类型又包含成员。
反射则提供了封装程序集、模块和类型的对象。
您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。
反射提供了封装程序集、模块和类型的对象(反射的层次模型为:程序集包含模块,而模块包含类型,类型又包含成员【成员--->类型--->模块--->程序集】)其中类型可以是(类、结构、枚举)。

优点:
缺点:
二、C# 反射的使用场景
三、C# 反射获取类型方式
1.类型:Type
1
//通过Typeof获取某个值的类型System.Type type = typeof(PeopleInfo);2
//通过GetType获取对象类型PeopleInfo peopleInfo = new PeopleInfo();
peopleInfo.Age = 23;
System.Type type1 = peopleInfo.GetType();
System.Type type2 = peopleInfo.Age.GetType();3
//通过GetType获取类名称类型System.Type type = System.Type.GetType("Test_Reflection.PeopleInfo");
2.成员:MethodInfo ,方法,字段,属性
成员字段:FieldInfo
成员属性:PropertyInfo
3.实例化:Activator 获取反射类型的三种方式
序号 获取反射类型的三种方式
Activator反射不同的构造进行实例化对象
序号 Activator方法 说明
1 CreateInstance(Type t) 使用默认Public修饰的无参数构造实例化对象
2 CreateInstance(Type,bool nonPublic) 使用Private修饰的无参构造实例化对象
3 CreateInstance(Type type, params object?[]? args) 使用Public修饰的有参构造实例化对象
4 CreateInstance(Type type, object?[]? args, object?[]? activationAttributes) 使用Public修饰的有参构造和公有属性实例化对象
5 CreateInstance(Type type, BindingFlags bindingAttr, Binder? binder, object?[]? args, CultureInfo? culture) 使用指定的BindingFlags组合,可选有无参数构造实例化对象
使用的命名空间
使用反射需要引用命名空间【using System.reflection】,这个命名空间包含如下的类:
System.Reflection命名空间包含的主要类
序号 System.Reflection命名空间包含的主要类(反射涉及到的类)
1 System.Reflection.Assembly
2 System.Reflection.MemberInfo
3 System.Reflection.EventInfo
4 System.Reflection.FieldInfo
5 System.Reflection.MethodBase
6 System.Reflection.ConstructorInfo
7 System.Reflection.MethodInfo
8 System.Reflection.PropertyInfo
9 System.Type
更多:
上一篇:微信小程序开发 开启
下一篇:开荒手册3——构思一篇小论文