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
Activator.CreateInstance 内部使用反射,比直接 new 慢不少,高频调用时建议缓存或换用更高效方式:
Expression.Lambda 编译委托(一次性开销,后续极快)Activator.CreateInstance() 泛型方法,性能更好且类型安全BindingFlags,但不推荐)InvalidOperationException
typeof(List).MakeGenericType(typeof(int))),再传给 CreateInstance
FileNotFoundException 或 TypeLoadException
基本上就这些。用对场景很实用,但别在热路径里反复调用 —— 不复杂但容易忽略性能代价。