当前位置: 首页 > news >正文

35、C# 中的反射(Reflection)

反射是 C# 和 .NET 框架中的一个重要特性,它允许程序在运行时检查、访问和操作类型、对象、属性和方法等元数据信息。

反射的核心概念

  • 运行时类型检查:反射允许你在程序运行时获取类型的详细信息,而不需要在编译时知道这些信息。
  • 动态操作:可以动态创建类型实例、调用方法和访问属性。

反射的主要用途

  • 动态加载和检查程序集
  • 查看类型信息(类、接口、结构等)
  • 获取和设置属性值
  • 调用方法(包括私有方法)
  • 创建类型实例
  • 实现依赖注入框架
  • 序列化和反序列化对象
  • 插件系统实现

基本反射示例

using System;
using System.Reflection;public class Person
{private string name;public Person(string name){this.name = name;}private void SayHello(){Console.WriteLine($"Hello, {name}");}
}class Program
{static void Main(){// 获取类型信息Type personType = typeof(Person);Console.WriteLine($"类型名称: {personType.Name}");// 获取构造函数信息ConstructorInfo constructor = personType.GetConstructor(new[] { typeof(string) });// 创建实例object personInstance = constructor.Invoke(new object[] { "张三" });// 获取方法信息MethodInfo sayHelloMethod = personType.GetMethod("SayHello", BindingFlags.NonPublic | BindingFlags.Instance);// 调用私有方法sayHelloMethod.Invoke(personInstance, null);}
}

反射的优缺点

优点:

  • 灵活性高,适合通用框架和库的开发
  • 支持动态编程和元编程
  • 可以处理编译时未知的类型

缺点:

  • 性能开销较大(比直接调用慢)
  • 代码可读性降低
  • 安全性考虑(需要适当的权限)
  • 编译时类型检查失效

实际应用场景

1、ASP.NET Core MVC:模型绑定和路由系统
2、依赖注入容器:如 Autofac、Ninject
3、序列化库:如 Newtonsoft.Json
4、ORM 框架:如 Entity Framework Core
5、单元测试框架:如 xUnit、NUnit

反射是 .NET 中非常强大的功能,但应谨慎使用,通常只在确实需要动态行为时才使用它。

在这里插入图片描述

相关文章:

  • C++类与对象—下:夯实面向对象编程的阶梯
  • Python之学习笔记(六)
  • 统计 三个工作日内到期的数据
  • 【多线程】八、线程池
  • TS 字面量类型
  • [2025]MySQL的事务机制是什么样的?redolog,undolog、binog三种日志的区别?二阶段提交是什么?ACID怎么保证的?主从复制的过程?
  • Jasper and Stella: distillation of SOTA embedding models
  • Solr 与 传统数据库的核心区别
  • 学习黑客Linux 命令
  • Django框架介绍+安装
  • 工业元宇宙:从虚拟仿真到虚实共生
  • 【mathematica】常见命令
  • 【51单片机6位数码管显示时间与秒表】2022-5-8
  • NPP库中libnppi模块介绍
  • 启发式算法-遗传算法
  • 如何用更少的显存训练 PyTorch 模型
  • 深入理解 Spring MVC:DispatcherServlet 与视图解析机制​
  • CSDN积分详解(介绍、获取、用途)
  • Docker 使用与部署(超详细)
  • SpringCloud教程 — 无废话从0到1逐步学习
  • 五四青年节|青春韵脚
  • 申活观察|精致精准精细,城市“双面镜”照见怎样的海派活力
  • 观察|印度购买“阵风”舰载机,为掌控印度洋加速升级海航装备
  • 准85后青海海北州副州长、州公安局局长李贤荣挂职临沂市副市长
  • 缔造“水饺皇后”的香港,也是被移民塑造的香港
  • 从孔雀尾巴到蒙娜丽莎,一个鸟类学博士眼中的“美”