全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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

反射(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]]");

// 查看类型信息 Console.WriteLine(type.Name); // 输出类型名 Console.WriteLine(type.Namespace); // 命名空间 Console.WriteLine(type.IsClass); // 是否是类

如何动态创建对象?

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

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

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

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

如何动态调用方法?

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

public class Calculator
{
    public int Add(int a, int b) => a + b;
}

// 反射调用 Add 方法 Type calcType = typeof(Calculator); var calc = Activator.CreateInstance(calcType);

MethodInfo method = calcType.GetMethod("Add"); var result = method.Invoke(calc, new object[] { 5, 3 }); // 返回 8 Console.WriteLine(result);

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

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

访问属性和字段

可以读写属性或字段值:

PropertyInfo prop = type.GetProperty("Name");
prop.SetValue(obj, "李四");
string name = (string)prop.GetValue(obj);

FieldInfo field = type.GetField("age", BindingFlags.NonPublic | BindingFlags.Instance); field.SetValue(obj, 25);

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

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


# c#  # gate  # gate.  # 架构  # String  # 命名空间  # 构造函数  # Reflection  # Delegate  # 委托  # 对象  # typeof  # 你可以  # 就能  # 只需  # 适用于  # 要在  # 较低  # 再用  # 可以根据  # 如何使用  # 李四 


相关文章: 如何获取开源自助建站系统免费下载链接?  如何在Windows服务器上快速搭建网站?  建站主机CVM配置优化、SEO策略与性能提升指南  建站主机是否属于云主机类型?  黑客如何通过漏洞一步步攻陷网站服务器?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  nginx修改上传文件大小限制的方法  python的本地网站制作,如何创建本地站点?  如何在橙子建站上传落地页?操作指南详解  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  香港服务器部署网站为何提示未备案?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  如何在企业微信快速生成手机电脑官网?  如何在阿里云部署织梦网站?  linux top下的 minerd 木马清除方法  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  如何用狗爹虚拟主机快速搭建网站?  动图在线制作网站有哪些,滑动动图图集怎么做?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  家庭建站与云服务器建站,如何选择更优?  如何安全更换建站之星模板并保留数据?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  香港服务器网站推广:SEO优化与外贸独立站搭建策略  学校免费自助建站系统:智能生成+拖拽设计+多端适配  网站制作新手教程,新手建设一个网站需要注意些什么?  已有域名和空间如何搭建网站?  如何快速搭建高效WAP手机网站?  图册素材网站设计制作软件,图册的导出方式有几种?  制作网站的软件免费下载,免费制作app哪个平台好?  ,网站推广常用方法?  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  模具网站制作流程,如何找模具客户?  如何配置FTP站点权限与安全设置?  如何通过VPS建站实现广告与增值服务盈利?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  免费视频制作网站,更新又快又好的免费电影网站?  盘锦网站制作公司,盘锦大洼有多少5G网站?  制作网站的模板软件,网站怎么建设?  上海网站制作开发公司,上海买房比较好的网站有哪些?  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  建站之星如何修改网站生成路径?  浅谈Javascript中的Label语句  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  如何快速使用云服务器搭建个人网站?  做企业网站制作流程,企业网站制作基本流程有哪些?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。