Подтвердить что ты не робот

Разница между Assembly.CreateInstance и Activator.CreateInstance?

В чем разница между этими вызовами?

4b9b3361

Ответ 1

Отсутствует. Assembly.CreateInstance фактически вызывает Activator.CreateInstance под капотом.

Использование рефлектора на Assembly.CreateInstance:

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

Ответ 2

Assembly.CreateInstance ищет тип в конкретной сборке, тогда как Activator.CreateInstance может создать объект любого типа.

Activator.CreateInstance имеет перегрузки, которые Assembly не имеет; например, он может создавать объекты в других доменах приложений или на другом сервере с помощью Remoting.

Ответ 3

Вы можете предоставить Activator.CreateInstance с именем типа и именем сборки вместо объекта Type. Это означает, что он попытается загрузить сборку в текущий AppDomain (если не загружен в настоящее время), а затем попытаться загрузить этот тип. Я считаю, что Assembly.CreateInstance(который вызывает активатор) не пытается загрузить сборку, если она не загружена. Он просто пытается получить объект Type для указанного типа и возвращает null, если он не найден (я говорю это, читая код, а не после тестирования).