新闻中心

C# Activator.CreateInstance的用法 - 动态创建对象实例

2025-12-08
浏览次数:
返回列表
Activator.CreateInstance 是 C# 中用于运行时动态创建对象实例的核心方法,支持无参/带参构造、泛型类型实例化,但性能较低,高频场景建议缓存委托或使用 ActivatorUtilities.CreateInstance。

c# activator.createinstance的用法 - 动态创建对象实例

Activator.CreateInstance 是 C# 中用于在运行时动态创建对象实例的核心方法,适用于反射、插件系统、依赖注入或需要根据类型名称/配置创建对象的场景。

基础用法:通过 Type 创建无参实例

最常见的是传入一个 Type 对象,创建该类型的默认(无参)实例:

  • 类型必须有 public 的无参构造函数,否则抛出 MissingMethodException
  • 支持 class 和 struct,但 struct 不会调用无参构造(C# 10+ 才允许为 struct 定义无参构造)
  • 示例:var obj = Activator.CreateInstance(typeof(List));

带参数构造:传递构造函数参数

当目标类型构造函数需要参数时,可传入参数数组:

  • 参数顺序和类型必须与目标构造函数完全匹配,否则抛异常
  • 支持值类型自动装箱,但要注意 null 传给非可空引用类型会报错
  • 示例:var person = Activator.CreateInstance(typeof(Person), "张三", 25);

泛型类型实例化

创建开放泛型类型(如 List)需先用 MakeGenericType 构造封闭类型:

PHP Apache和MySQL 网页开发初步 PHP Apache和MySQL 网页开发初步

本书全面介绍PHP脚本语言和MySOL数据库这两种目前最流行的开源软件,主要包括PHP和MySQL基本概念、PHP扩展与应用库、日期和时间功能、PHP数据对象扩展、PHP的mysqli扩展、MySQL 5的存储例程、解发器和视图等。本书帮助读者学习PHP编程语言和MySQL数据库服务器的最佳实践,了解如何创建数据库驱动的动态Web应用程序。

PHP Apache和MySQL 网页开发初步 398 查看详情 PHP Apache和MySQL 网页开发初步
  • 不能直接对 typeof(List) 调用 CreateInstance
  • 正确做法:var listType = typeof(List).MakeGenericType(typeof(int));
      var list = Activator.CreateInstance(listType);

性能与替代方案

Activator.CreateInstance 内部使用反射,性能较低,高频调用时建议缓存或换方式:

  • 对同一类型多次创建,可用 System.Linq.Expressions.Expression.Lambda 编译委托缓存构造逻辑
  • .NET Core 3.0+ 推荐用 ActivatorUtilities.CreateInstance(配合 IServiceProvider)做依赖注入式创建
  • 简单场景下,FormatterServices.GetUninitializedObject 可绕过构造函数(仅用于反序列化等特殊用途)

基本上就这些。用对场景、注意构造函数可见性和参数匹配,就能安全高效地动态创建实例。

以上就是C# Activator.CreateInstance的用法 - 动态创建对象实例的详细内容,更多请关注其它相关文章!


# 解决问题  # 注会报名网站建设海报  # 温州营销推广运营团队  # 怀化搜狗seo优化收费  # 平稳seo  # 关键词排名灬金手指花总  # 书籍网站建设银行  # 一键检测关键词排名  # 康平网站建设什么价格  # 特征抓取SEO  # 东营网站建设优势有哪些  # c#  # 中文网  # 相关文章  # 适用于  # 如何在  # 就能  # 的是  # 较低  # 长时间  # 本书  # .net 


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


相关推荐: 微信怎么把收藏的内容分类管理 微信收藏内容标签分类方法  c++ 命名空间怎么用 c++ namespace使用指南  如何使用纯J*aScript判断Input元素是否在特定类容器内  一加 14R 快充无反应_一加 14R 充电优化  QQ邮箱电脑版登录入口_QQ邮箱官方网站登录平台  Odoo 16:在表单视图中基于当前记录动态修改Tree视图属性  win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】  汽水音乐网页版使用入口_汽水音乐电脑版播放指南  C++如何解决segmentation fault_C++段错误调试与原因分析  outlook中文官网入口地址 outlook官方中文版直达首页链接  学习通网页版官方登录 超星学习通电脑端入口指南  零跑汽车11月交付量达70327台 实现连续9个月正增长  126邮箱账号注册 电脑版登录入口  抖音怎么赚钱_抖音创作者变现方法与途径指南  如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!  必由学在线入口 必由学网页版快速登录入口  QQ邮箱官方网站登录入口_QQ邮箱网页版在线使用  TikTok搜索不到用户发布内容怎么办 TikTok用户内容搜索优化方法  如何在复杂的电商平台中优雅地管理共享资源并确保正确重定向,使用spryker-shop/resource-share-page模块助你一臂之力  b站怎么删除评论_b站评论管理与删除操作  mysql备份恢复性能优化_mysql备份恢复性能优化方法  LINUX怎么设置定时任务_LINUX crontab配置教程  在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明  没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享  知音漫客官网漫画下载_知音漫客网页版阅读记录  写好的html代码怎么运行出来_运行写好的html代码方法【教程】  狙击外星人小游戏开始_狙击外星人小游戏立即开始  CSS Grid如何控制元素对齐_align-items与justify-items组合使用  J*aScript打印功能_j*ascript输出控制  J*a里如何实现订单支付与库存同步功能_支付库存同步项目开发方法说明  uc浏览器网页版入口 uc浏览器网页版最新网址  电脑屏幕颜色不舒服怎么办_Windows夜间模式与色彩校准教程【护眼技巧】  msn官网入口地址手机版 msn官方网站手机最新链接  铁路12306卧铺选择攻略 铁路12306下铺座位预定技巧  浏览器打开即用 美图秀秀网页版入口  Win11怎么关闭触摸屏_Windows 11禁用HID符合标准触摸屏  PowerPoint如何制作滚动字幕结尾彩蛋_PowerPoint路径动画实现平滑滚动字幕效果  如何优雅地解决Livewire文件上传难题?SpatieLivewireFilepond让一切变得简单  HTML元素状态管理:根据DIV内容动态启用/禁用按钮  百度网盘网页版入口 百度网盘网页版官方登录网址  Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式  极兔快递快件信息查询系统 极兔快递官网运单号追踪  c++如何使用Meson构建系统_c++比CMake更快的构建工具  MongoDB Aggregation:在嵌套对象数组中精确匹配ObjectId  J*a编写用户注册与登录功能_掌握字符串与验证逻辑  将JSON对象数组转置为键值对列表的实用指南  J*aScript对象创建方式_J*aScript设计模式应用  谷歌浏览器无痕模式怎么开 Chrome开启无痕浏览设置方法【教程】  优酷会员付费后没到账怎么办_优酷会员充值异常及解决方法  Golang如何安装Swagger工具_GoSwagger文档生成环境 

搜索