Создание объекта без знания имени класса во время разработки
-
09-06-2019 - |
Вопрос
Используя рефлексию, мне нужно исследовать пользовательскую DLL и создать в ней объект класса.
Каков простой способ сделать это?
Решение
Пытаться Активатор.CreateInstance.
Другие советы
System.Reflection.Assembly
это класс, который вы захотите использовать.Он содержит множество методов для перебора типов, содержащихся в пользовательской DLL.Вы можете перебирать каждый класс, возможно, посмотреть, наследуется ли он от определенного интерфейса и т. д.
http://msdn.microsoft.com/en-us/library/system.reflection.assembly_members.aspx
Расследовать Assembly.GetTypes()
метод получения списка типов или Assembly.GetExportedTypes()
только для публичных.
Вы можете создать экземпляр класса из объекта Type, используя Activator.CreateInstance, чтобы получить все типы в dll, вы можете использовать Assembly.GetTypes.
Взгляните на эти ссылки:
http://www.java2s.com/Code/CSharp/Development-Class/Createanobjectusingreflection.htm
http://msdn.microsoft.com/en-us/library/k3a58006.aspx
По сути, вы используете отражение для загрузки сборки, а затем находите интересующий вас тип.Если у вас есть тип, вы можете попросить найти его конструкторы или другие методы/свойства.Если у вас есть конструктор, вы можете его вызвать.Легкий!
Как уже было сказано, нужно потыкать пространство имён System.Reflection.
Если вы заранее знаете местоположение/имя DLL, которую хотите загрузить, вам нужно выполнить итерацию по методу Assembly.GetTypes().
В псевдокоде это будет выглядеть примерно так:
Создать и собрать объект.
Перебрать все типы, содержащиеся в сборке.
Как только вы найдете тот, который ищете, вызовите его (CreateInstance)…
Использовать его мудро.
;)
У меня есть много кода Reflection, если вы хотите осмотреться, но задача действительно проста, и в Интернете есть как минимум дюжина статей с примерами.(он же Гугл).Несмотря на это, MSDN — ваш друг для справки по размышлению.