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

时间:2009-12-02 15:26:57

标签: c# reflection assemblies

这些电话有什么区别?

3 个答案:

答案 0 :(得分:18)

无。 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);
}

答案 1 :(得分:16)

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

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

答案 2 :(得分:2)

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