Есть ли способ динамически создать объект, используя строку в качестве имени класса?
Я отключен от VB уже несколько лет, но для решения проблемы на другом языке я вынужденразработать обертку в этом.У меня есть фабричный метод для динамического создания и возврата объекта типа на основе входных данных из других источников.Предоставленный ввод должен быть именем класса, из которого создается объект.Обычный синтаксис означает, что весь класс должен быть явно прописан.Чтобы сделать это таким образом, буквально могут быть сотни if / then или case для обработки всех доступных вариантов классов / объектов в ссылочных библиотеках:
If c_name = "Button" then obj = new System.Windows.Forms.Button
If c_name = "Form" then obj = new System.Windows.Forms.Form
....
Я надеюсь вместо этого уменьшить все это делообработка в одну строку: IE ...
my_class_name = "whateverclass"
obj = new System.Windows.Forms.my_class_name()
В PHP это обрабатывается так ...
$my_class_name = "whateverclass";
$obj = new $my_class_name();
Редактировать: Глядя на некоторыеиз ответов, я думаю, что я в пути над моей головой здесь.Мне удалось заставить его работать, используя это изменение метода CreateInstance класса Assembly, хотя меня больше интересует это изменение, дающее больше опций , включая предоставление параметров конструкции ...
my_type_name = "System.Windows.Forms.Button"
asmb_name = "System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
button1 = Reflection.Assembly.Load(asmb_name).CreateInstance(my_type_name)
Другими словами, для этого нужен метод, а не какой-либо синтаксис языка? Этот вариант Activator также работал при использовании полной строки сборки и пути к классам.Я подозреваю, что CreateInstance может не иметь полной возможности разрешать мне обрабатывать объекты, как если бы они были вызваны нормально, то есть obj = new System.Windows.Forms.Button
.Вот почему я не могу просто использовать CreateObject
.Если нет функции естественного языка, позволяющей заменить имя класса на строку, кто-нибудь знает, какие ограничения можно ожидать от использования CreateInstance
?
Кроме того, есть ли разница?между базовыми методами Activator.CreateInstance (после развертывания) и Assembly.CreateInstance?