0

есть подключенная к проекту сборка "PersonInfo" в котором есть файл "Person". Есть способ 1 создания экземпляра класса:

Person p = (Person)Activator.CreateInstance("PersonInfo", "Person").Unwrap();

есть обычный способ 2:

Person p = new Person();

Вопрос: зачем нужен способ 1 если есть простой способ 2 ?

  • 1
    насколько я знаю, первый способ используют тогда, когда подключаемая сборка динамически подгружается, и может подменяться, не ребилдая основную сборку (так называемый "плагин") – Andrei Khotko Apr 14 '23 at 19:41
  • спасибо большое – Леонид Дубовик Apr 14 '23 at 19:49
  • 1
    Активатор - это одна из основных частей IoC контейнеров, которые создают и внедряют все зависимости за вас. Плюсы я думаю вы и так уже понимаете, позволяет сделать что-то универсальное, динамичное, не зависящее на одном конкретном типе, что находит много где применения. – EvgeniyZ Apr 14 '23 at 21:37
  • спасибо большое – Леонид Дубовик Apr 21 '23 at 16:20

1 Answers1

2

Этот пример несовсем правильный. В первом случае как правило явный тип не используется.

Ответ прост, активатор применяется тогда, когда вы не знаете на этапе компиляции, какой тип объекта в этом месте кода предстоит создать. Помимо активатора есть и другие динамические способы создаия объектов.

А явный вызов конструтора используется, когда на момент написания кода, точно известно, какой тип требуется создать в этом месте.

Вот пример рабочего использования активатора, где явный вызов конструктора никак не подойдёт.

aepot
  • 49,560