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

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 中非常强大的功能,但应谨慎使用,通常只在确实需要动态行为时才使用它。

在这里插入图片描述

http://www.xdnf.cn/news/3865.html

相关文章:

  • 深入理解 Spring MVC:DispatcherServlet 与视图解析机制​
  • 快速弄懂POM设计模式
  • 1991年-2023年 上市公司-重污染企业数据 -社科数据
  • GitHub 趋势日报 (2025年05月03日)
  • 多模态大语言模型arxiv论文略读(五十九)
  • STM32教程:ADC原理及程序(基于STM32F103C8T6最小系统板标准库开发)*详细教程*
  • 数电填空题整理(适用期末考试)
  • Linux网络编程:套接字
  • C++类_匿名类
  • 从入门到登峰-嵌入式Tracker定位算法全景之旅 Part 2 |蜂窝 LBS on Tracker:从 AT 命令到定位结果
  • 今天python练习题
  • MYSQL-联合查询
  • 【前端】【总复习】HTML
  • 基于 ESP32 和 GC9D01 0.71寸TFT屏幕的逼真眼睛与写轮眼动态显示
  • Spring Boot Jpa封装快速构建Specification、OrderBy、Pageable的查询条件
  • 【Python】一直没搞懂生成器是什么。。
  • 【25软考网工】第五章(5)ICMP和ICMPv6、NDP、IP组播技术和MPLS
  • JavaScript基础-分支流程控制
  • strstr()和strpbrk()函数的区别
  • 学习黑客开源情报
  • Go语言接口实现面对对象的三大特征
  • 基于大模型的隐睾(睾丸可触及)预测及临床干预策略研究报告
  • spring中的@Profile注解详解
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】2.3 窗口函数与高级聚合(ROW_NUMBER()/RANK()/SUM() OVER())
  • 民法学学习笔记(个人向) Part.3
  • Python 库 petrel_client.client 浅入浅出
  • 【CISCO】什么是静态路由(Static Route)?ip route 192.0.1.0 255.255.255.0 200.0.0.1
  • 一周学会Pandas2 Python数据处理与分析-Pandas2复杂数据查询操作
  • 【前端】【面试】在 Nuxt.js SSR/SSG 应用开发的 SEO 优化方面,你采取了哪些具体措施来提高页面在搜索引擎中的排名?
  • NPP库中libnppist模块介绍