新闻中心

C#的反射(Reflection)是什么?如何动态获取类型信息并调用方法?

2025-11-22
浏览次数:
返回列表
通过反射可动态获取类型信息、创建对象并调用成员。使用 typeof 或 GetType() 获取 Type 对象,查询名称、命名空间等元数据;通过 Activator.CreateInstance 创建实例,支持无参或有参构造函数;利用 GetMethod 获取 MethodInfo 后调用方法,配合 BindingFlags 可访问私有成员;PropertyInfo 和 FieldInfo 分别用于读写属性与字段值;反射性能较低,建议缓存 Type 和 MethodInfo 或结合委托优化。

c#的反射(reflection)是什么?如何动态获取类型信息并调用方法?

反射(Reflection) 是 C# 提供的一种强大机制,允许程序在运行时动态获取类型信息、创建对象、调用方法、访问字段和属性等,而不需要在编译时知道这些类型的细节。它通过 System.Reflection 命名空间实现,适用于插件架构、序列化、ORM 框架、依赖注入等场景。

如何使用反射获取类型信息?

你可以通过 typeofGetType()Type.GetType(string) 获取 Type 对象,进而查询类的结构。

例如:

// 获取类型
Type type = typeof(string);
// 或从实例获取
object obj = "hello";
Type type2 = obj.GetType();
// 或通过字符串名称获取(需完整命名空间)
Type type3 = Type.GetType("System.Collections.Generic.List`1[[System.Int32]]");
<p>// 查看类型信息
Console.WriteLine(type.Name);        // 输出类型名
Console.WriteLine(type.Namespace);   // 命名空间
Console.WriteLine(type.IsClass);     // 是否是类</p>

如何动态创建对象?

使用 Activator.CreateInstance 可以根据 Type 创建实例。

Type type = typeof(List<int>);
var list = Activator.CreateInstance(type);

如果构造函数有参数,也可以传入:

Type type = typeof(Student);
var student = Activator.CreateInstance(type, "张三", 20);

如何动态调用方法?

通过 GetMethod 获取 MethodInfo 对象,再用 Invoke 调用方法。

CA.LA CA.LA

第一款时尚产品在线设计平台,服装设计系统

CA.LA 94 查看详情 CA.LA
public class Calculator
{
    public int Add(int a, int b) => a + b;
}
<p>// 反射调用 Add 方法
Type calcType = typeof(Calculator);
var calc = Activator.CreateInstance(calcType);</p><p>MethodInfo method = calcType.GetMethod("Add");
var result = method.Invoke(calc, new object[] { 5, 3 }); // 返回 8
Console.WriteLine(result);</p>

支持调用私有方法,只需指定 BindingFlags:

MethodInfo privateMethod = type.GetMethod("PrivateMethod", 
    BindingFlags.NonPublic | BindingFlags.Instance);

访问属性和字段

可以读写属性或字段值:

PropertyInfo prop = type.GetProperty("Name");
prop.SetValue(obj, "李四");
string name = (string)prop.GetValue(obj);
<p>FieldInfo field = type.GetField("age", BindingFlags.NonPublic | BindingFlags.Instance);
field.SetValue(obj, 25);</p>

反射虽然灵活,但性能低于直接调用,建议缓存 Type 和 MethodInfo 对象,或结合委托(如 Expression Tree 或 Delegate.CreateDelegate)提升效率。

基本上就这些,掌握 Type、Activator、GetMethod、Invoke 等核心操作,就能实现大多数动态需求。

以上就是C#的反射(Reflection)是什么?如何动态获取类型信息并调用方法?的详细内容,更多请关注其它相关文章!


# c#反射  # 动态类型  # 要在  # 适用于  # 只需  # 就能  # 你可以  # 如何实现  # 序列化  # 如何使用  # gate.  # gate  # c#  # 如何处理  # 武安营销推广网招聘网  # 河南网站建设找谁做公司  # 高端网站建设课程设计  # 东莞我想网站建设  # 岱山线上营销推广  # seo中级证  # seo应该分析哪些数据  # 营销推广收官阶段  # 浙江seo推广平台排名  # 网络营销推广就选火1星  # 相关文章 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Go语言中的*string:深入理解字符串指针  漫蛙官网正版漫画入口 漫蛙2官方网页登录地址  Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】  在J*a中如何开发简易仓库管理与库存统计_仓库管理库存统计项目实战解析  c++ 命名空间怎么用 c++ namespace使用指南  J*aScript中高效清空DOM列表元素:解决for循环中断与任务管理问题  俄罗斯方块最新版入口 俄罗斯方块在线玩官网入口  想当下一个《2077》?《心之眼》Steam评价升至"多半好评"  如何使用纯J*aScript判断Input元素是否在特定类容器内  如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流  c++中的std::basic_string的SSO优化_c++短字符串优化深度解析  DLsite中文平台入口 DLsite官网内容在线查看  德邦快递查询平台 德邦快递物流信息查询入口  《刺客信条4:黑旗》重制版新细节曝光:无缝加载 地图更细致!  Go语言中Map存储的结构体如何调用指针方法:深入解析与实践  J*a TimerTask中HashMap意外清空的深层原因与解决方案  React/Next.js中实现列表项的动态选择与移动  Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接  韩小圈电脑版在线入口_网页版免费登录地址  NVIDIA股价11月重挫12%:下月有望好转 但难回5万亿美元巅峰  Lar*el Excel导入时生成自定义递增ID的策略与实践  Golang如何实现Web接口签名验证_Golang Web接口签名校验开发方法  苹果手机如何防止被恶意App追踪  C++如何生成随机数_C++ random库使用方法与范围设置  网易大神账号申诉需要多久_网易大神账号申诉流程说明  ArrayList与LinkedList操作复杂度详解:遍历与修改  如何在CSS中使用visited与link控制链接颜色_visited link伪类配合  QQ网页版官方账号入口 QQ网页版网页版登录指南  漫蛙漫画官方主页入口 漫蛙MANWA网页直达访问链接  Mac怎么锁定备忘录_Mac备忘录加密设置教程  在Typer应用中优雅地处理和重组任意命令行参数  Win11怎么开启省电模式_Win11电池节电模式自动开启  《燕云十六声》两周内达九百万玩家!位居畅销榜第五  mc.js免安装版 mc.js一键畅玩入口  HTML转PPT成品工具有哪些?HTML网页转PPT成品工具大全  CSS Flexbox如何实现多行排列_flex-wrap wrap自动换行显示  电脑安装程序提示“错误1722”怎么办_Windows Installer服务问题解决【教程】  AO3访问入口汇总 AO3网页版同人作品一键直达  海量存储:机器视觉智能化的核心基石  解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误  qq游戏免费畅玩入口_qq游戏电脑版快速启动  2025AO3夸克浏览器通道_AO3手机HTTPS安全入口分享  Excel组合图表怎么做 Excel创建柱状图与折线组合图教程【图表】  QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口  Win11截图该按哪些键 Win11截屏完整流程解析【教程】  Pandas DataFrame 多条件优先级排序与排名  微信网页版扫码登录入口 微信网页版二维码登录入口  c++中的std::forward_list和std::list有什么不同_c++ forward_list与list区别分析  MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复  word中如何让数字纵向排列_Word数字纵向排列方法 

搜索