C#【唐老狮】反射
2022-07-30 本文已影响0人
Die时而动
反射
反射概念和关键类TYpe
- 程序集
- 经由编译器编译得到,进一步编译执行的中间产物
- dll文件
- 扩展:C语言编译过程
- 预处理
- 编译
- 汇编:目标文件
- 链接:可执行文件
- 经由编译器编译得到,进一步编译执行的中间产物
- 元数据
- 描述数据的数据
- 程序或类型的数据,存放在程序集中
- 描述数据的数据
- 反射概念
- 运行时(程序加载到内存中变为进程)查看本身或其他程序的元数据的行为
- 反射作用
- 运行时得到所有元数据
- 运行时实例化对象,操作对象
- 运行时调用其他程序集里的代码
- Type:类的反射信息类
- 获取Type
- object.GetType()
- typeof(类名)
- Type.GetType("包含命名空间的类名")
- 指向同一类 元数据的Type引用指向同一个地址
- 获取程序集
- Type.Assembly
- 获取所有公共成员
- MemberInfo类
- Type.GetMembers()
- 获取类的公共构造函数
- 获取所有构造函数
- ConstructorInfo类
- type.GetConstructors()
- 获取其中一个构造函数并执行
- 得到构造函数传入Type数组(构造函数形参)
- Type.GetContructor(new Type[0]) 无参构造
- Type.GetConstuctor(new Type[]{typeof(形参类型)})
- 执行构造函数,传入object数组(构造函数形参)
- ConstructorInfo.Invoke(null) 无参构造
- ConstructorInfo.Invoke(new object[]{实参})
- 得到构造函数传入Type数组(构造函数形参)
- 获取所有构造函数
- 获取类的公共成员变量
- 获取所有成员变量
- FieldInfo类
- Type.GetFields()
- 获取指定名称公共成员变量
- Type.GetField("成员变量名")
- 通过反射获取和设置指定对象的值
- FieldInfo.GetValue(指定对象引用)
- FieldInfo.SetValue(指定对象引用)
- 获取所有成员变量
- 获取类的公共成员方法
- MethodInfo类
- 获取所有公共方法
- Type.GetMethods()
- 获取指定方法
- Type.GetMethod("方法名",new Type[]{typeof(形参类型)})
- 调用方法
- MethodInfo.Invoke(方法名,new object[]{实参})
- 获取Type
反射关键类Assembly和Activator
- Activator
- 作用
- 快速实例化对象(静态方法)
- 使用
- 无参构造
- Activator.CreateInstance(Type)
- 有参构造
- Activator.CreateInstance(Type,实参)
- 无参构造
- 作用
- Assembly
- 作用
- 加载程序集并使用程序集
- 使用
- Assembly类
- 加载指定程序集
- Assembly.Load("程序集名称")同一文件下程序集
- Assembly.LoadFrom("路径字符串")不同文件下程序集
- Assembly.LoadFile("路径字符串")
- 加载程序集中的类对象
- Assembly.GetTypes()获取所有元数据类
- Assembly.GetType("完整类名")
- 作用
- 类库工程
- 纯逻辑代码,自身不可执行,提供逻辑给别人用