什么是反射?
- 在运行时检查并使用元数据和编译代码的操作称为反射。
- 反射提供描述程序集、模块和类型的对象(Type 类型)。
- 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型,然后调用其方法或访问器字段和属性。
关于C#反射
C#程序编译后会生成dll或exe文件。一个dll对应一个程序集。他们的区别是:exe有运行的入口可以直接运行,dll没有入口只能被其他exe调用。
不管exe还是dll,都会包含:
- 资源文件
- 类型元数据(metadata)(描述在代码中定义的所有成员)
- IL代码
而反射就是在运行时去检查和使用元数据(metadata)及编译代码的操作。
程序集(Assembly)操作
通过Assembly
即可手动加载程序集,并实现对其操作。Unity的运行时代码编译后在Assembly-CSharp
中,编辑器相关代码在Assembly-CSharp-Editor
中。
常用加载程序集方法:
1 | // 加载某个程序集 |
Unity中使用反射要点
- 反射在IOS端有限制,最好不使用
- 如果游戏要发布到IOS, 逻辑中不要使用反射
- 编辑器拓展工具随便用