Полное имя типа обычно используется для «поздней» привязки к определенному типу. В имеющемся примере файла конфигурации фактический тип раздела конфигурации не был известен во время сборки CLR, поэтому ConfigurationManager
должен прочитать фактический тип из файла конфигурации и выполнить его очистку во время выполнения. Это делается с использованием класса System.Activator
, как вы упомянули, и это стандартный способ сделать это в мире .Net.
Конечно, если тип, для которого вы хотите создать экземпляр, известен во время сборки, вы должны просто сослаться на сборку, которая его содержит, и использовать new
. Однако, если вы хотите реализовать расширяемость во время выполнения, такую как ConfigurationManager
, вы должны использовать методы Activator
CreateInstance
или CreateInstanceFrom
, которые имеют переопределения, которые позволяют передать точную строку, прочитанную из любой используемой конфигурации, или экземпляр Type
, который также может быть создан из той же строки.
И, конечно, есть и другая сторона, где любая реализация вашей точки расширяемости должна выписать полное имя типа. Для этого вы можете использовать typeof(MyType).FullName
или myInstance.GetType().FullName
.