Разница между Assembly.CreateInstance и Activator.CreateInstance? - PullRequest
19 голосов
/ 02 декабря 2009

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

Ответы [ 3 ]

18 голосов
/ 02 декабря 2009

Отсутствует. 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);
}
16 голосов
/ 02 декабря 2009

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

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

2 голосов
/ 02 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...