Assembly.CreateInstance和Activator.CreateInstance之间的区别?

这些电话有什么区别?

没有。 Assembly.CreateInstance实际上调用了Activator.CreateInstance。

在Assembly.CreateInstance上使用Reflector:

public object CreateInstance(string typeName, bool ignoreCase, BindingFlags bindingAttr, Binder binder, object[] args, CultureInfo culture, object[] activationAttributes) { Type type = this.GetType(typeName, false, ignoreCase); if (type == null) { return null; } return Activator.CreateInstance(type, bindingAttr, binder, args, culture, activationAttributes); } 

Assembly.CreateInstance在特定程序集中查找类型,而Activator.CreateInstance可以创建任何类型的对象。

Activator.CreateInstance具有Assembly没有的重载; 例如,它可以使用远程处理在其他应用程序域或其他服务器上创建对象。

您可以使用类型名称和程序集名称而不是Type对象提供Activator.CreateInstance 。 这意味着它将尝试将程序集加载到当前AppDomain(如果当前未加载),然后尝试加载该类型。 我相信如果没有加载Assembly.CreateInstance(它调用Activator)不会尝试加载程序集。 它只是尝试获取指定类型的Type对象,如果找不到它则返回null(我通过阅读代码而不是在测试之后这样说)。