C#怎么使用Activator.CreateInstance C#动态创建对象方法
发布时间 - 2026-01-27 00:00:00 点击率:次Activator.CreateInstance 是 C# 中通过 Type 对象在运行时动态创建对象的方法,支持无参/带参构造函数、泛型类型及反射场景,但性能低于 new,高频调用需优化。
Activator.CreateInstance 是 C# 中用于在运行时动态创建对象的常用方式,适用于类型未知、依赖注入、插件系统或反射场景。它不依赖编译期确定的类型,而是通过 Type 对象来实例化类。
基础用法:无参构造函数创建对象
最简单的情况是目标类有 public 无参构造函数:
var type = typeof(List); var list = Activator.CreateInstance(type); // 返回 object,需显式转换 // 或直接指定泛型类型(推 荐) var list2 = (List
)Activator.CreateInstance(typeof(List ));
注意:返回值是 object,如果需要强类型操作,必须强制转换或使用泛型重载(.NET Core 2.0+ / .NET 5+ 支持)。
带参数的构造函数创建对象
当类的构造函数需要参数时,可传入参数数组:
public class Person
{
public Person(string name, int age) { /* ... */ }
}
var person = (Person)Activator.CreateInstance(
typeof(Person),
"张三", 25);
- 参数顺序和类型必须严格匹配构造函数签名
- 如果参数类型不匹配(如传入
long但构造函数要int),会抛出ArgumentException - 支持值类型、引用类型、null(前提是构造函数允许)
性能与替代方案
Activator.CreateInstance 内部使用反射,比直接 new 慢不少,高频调用时建议缓存或换用更高效方式:
- 对固定类型:用
Expression.Lambda编译委托(一次性开销,后续极快) - .NET 5+ 推荐
Activator.CreateInstance泛型方法,性能更好且类型安全() - 依赖注入容器(如 Microsoft.Extensions.DependencyInjection)更适合管理生命周期和依赖关系
常见问题与注意事项
- 目标类型必须有可访问的构造函数(private 构造函数需配合
BindingFlags,但不推荐) - 静态类、抽象类、接口无法实例化,会抛出
InvalidOperationException - 泛型类型需先构造(
typeof(List).MakeGenericType(typeof(int))),再传给CreateInstance - 跨程序集时确保类型已加载,否则抛出
FileNotFoundException或TypeLoadException
基本上就这些。用对场景很实用,但别在热路径里反复调用 —— 不复杂但容易忽略性能代价。
# microsoft
# 常见问题
# c#
# .net
# Object
# NULL
# 构造函数
# int
# Lambda
# 接口
# 值类型
# 引用类型
# public
# private
# 参数数组
# 委托
# 泛型
# 对象
# typeof
# 抛出
# 适用于
# 但不
# 最简单
# 它不
# 更适合
# 极快
# 返回值
# 不匹配
# 加载
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
如何实现javascript表单验证_正则表达式有哪些实用技巧
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
如何在建站之星绑定自定义域名?
如何在万网利用已有域名快速建站?
使用C语言编写圣诞表白程序
长沙企业网站制作哪家好,长沙水业集团官方网站?
如何在IIS服务器上快速部署高效网站?
如何在建站主机中优化服务器配置?
Python文件异常处理策略_健壮性说明【指导】
做企业网站制作流程,企业网站制作基本流程有哪些?
如何在万网自助建站中设置域名及备案?
如何在云虚拟主机上快速搭建个人网站?
如何快速完成中国万网建站详细流程?
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
lovemo网页版地址 lovemo官网手机登录
详解MySQL数据库的安装与密码配置
Laravel中的Facade(门面)到底是什么原理
实例解析Array和String方法
如何在搬瓦工VPS快速搭建网站?
Laravel API资源类怎么用_Laravel API Resource数据转换
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
在线制作视频的网站有哪些,电脑如何制作视频短片?
如何用PHP工具快速搭建高效网站?
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
如何快速使用云服务器搭建个人网站?
如何制作一个表白网站视频,关于勇敢表白的小标题?
Laravel怎么实现模型属性的自动加密
iOS验证手机号的正则表达式
如何快速辨别茅台真假?关键步骤解析
如何构建满足综合性能需求的优质建站方案?
EditPlus 正则表达式 实战(3)
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
用yum安装MySQLdb模块的步骤方法
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
如何在IIS7上新建站点并设置安全权限?
如何用PHP快速搭建CMS系统?
高防服务器租用指南:配置选择与快速部署攻略
Laravel怎么使用artisan命令缓存配置和视图
郑州企业网站制作公司,郑州招聘网站有哪些?
如何打造高效商业网站?建站目的决定转化率
Python数据仓库与ETL构建实战_Airflow调度流程详解
西安专业网站制作公司有哪些,陕西省建行官方网站?
Android 常见的图片加载框架详细介绍
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?


