通过反射可动态获取类型信息、创建对象并调用成员。使用 typeof 或 GetType() 获取 Type 对象,查询名称、命名空间等元数据;通过 Activator.CreateInstance 创建实例,支持无参或有参构造函数;利用 GetMethod 获取 MethodInfo 后调用方法,配合 BindingFlags 可访问私有成员;PropertyInfo 和 FieldInfo 分别用于读写属性与字段值;反射性能较低,建议缓存 Type 和 MethodInfo 或结合委托优化。
反射(Reflection) 是 C# 提供的一种强大机制,允许程序在运行时动态获取类型信息、创建对象、调用方法、访问字段和属性等,而不需要在编译时知道这些类型的细节。它通过 System.Reflection 命名空间实现,适用于插件架构、序列化、ORM 框架、依赖注入等场景。
你可以通过 typeof、GetType() 或 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小时内与您取得联系。