请解释 .NET 中反射的概念,并列举其常见的应用场景有哪些?
考察说明
考查对 .NET 反射机制的理解及其实际应用能力。
回答思路
- 【回答框架 1】反射是指在运行时获取程序集、模块、类型、成员等元数据信息,并动态创建实例、调用方法或访问属性的能力。在 .NET 中,主要通过 System.Reflection 命名空间下的类型实现,如 Assembly、Type、MethodInfo 等。
- 【回答框架 2】反射的核心依据是元数据,即编译进程序集的类型和成员描述。通过 Type 对象可以获取类型信息,例如属性、方法、字段、构造函数等,并能动态执行操作,这使程序具备元编程能力。
- 【回答框架 3】反射的典型应用场景包括:动态加载程序集和类型以实现插件架构;通过特性(Attribute)进行自定义标注和运行时检查;ORM 框架中映射数据库表与实体类;序列化与反序列化;依赖注入容器;以及开发工具中枚举类型成员或生成代码。
- 【回答框架 4】反射的代价是性能开销较大,因为涉及动态类型解析和元数据查找,通常比直接调用慢。使用时应缓存 Type 或 MethodInfo 等对象以减少反射调用次数,或在可接受范围内使用。此外,反射可能破坏封装,过度使用会降低可维护性。
- 【关键点 1】反射通过元数据在运行时获取类型信息和动态调用成员。
- 【关键点 2】常用 API 包括 Assembly、Type、MethodInfo 和 Attribute。
- 【关键点 3】应用场景有插件架构、自定义特性、ORM、序列化和依赖注入。
- 【关键点 4】反射性能开销大,建议缓存反射对象。
- 【关键点 5】反射会破坏封装,应谨慎使用。
- 【易错点 1】不要将反射泛化为保证所有动态操作的正确性或安全性,需考虑权限和异常处理。
- 【易错点 2】避免在循环或高频路径中重复使用反射调用,应预先缓存 MethodInfo 等对象。
- 【易错点 3】使用反射时需处理类型不匹配或成员缺失等情况,避免直接假设存在。