前言
C#编写的程序会编译成一个程序集(.DLL或.exe),其中会包含元数据、编译代码和资源,通过反射可以获取到程序集中的信息 。通俗来讲,反射就是我们在只知道一个对象的外部而不了解内部结构的情况下,可以知道这个对象的内部实现
反射的作用
1.遍历成员,并调用成员
声明Student学生类:
Type的常用属性:
单独设置类中的字段值,获取类中的字段值:
GetFields()获取所有公开的字段
GetField(string name)获取特定名称的字段
GetProperties()获取所有公开的属性
GetProperterty()获取所有公开的方法
GetMethods()获取所有公开的方法
GetMethods()获取特定名称的方法
MethodInfo类型常用方法
Invoke(obj,object[]参数列表)==》调用方法
获取类的属性:
获取类的方法:
获取的是类的公开的public方法,属性的本质实际上就是set,get方法。
获取类的方法,并调用:
在线更新功能,下面是反射程序集:
通过反射,获取得到的类型:,下面是反射的核心代码
可以应用在我们之后的游戏开发中更新问题上,当我们更新一些功能的时候,我们只需要替换相应的dll文件就可以了。
反射的优缺点
- 优点:提高了程序的灵活性和扩展性,降低耦合度
- 缺点:由于反射多了一道程序,性能上相较于直接代码要慢
- 首先在编译中分为动态编译和静态编译,静态编译是在编译中确定类型,绑定对象,而动态编译是在运行中确定类型,绑定对象
反射的优点就是可以动态创建对象、绑定对象,提高了程序的灵活性和扩展性,但反射是一种解释操作,在性能上不如静态编译快
反射与元数据
反射 来自 System.Reflection命名空间,它可以读取程序集中的元数据,利用元数据创建对象,从而实现各种功能。
反射读取的是元数据,反编译读取的IL代码
参考文档: blog.csdn.net/qq_39847278… blog.csdn.net/qq_39847278… blog.csdn.net/LLLLL__/art…