Создание объекта без знания имени класса во время разработки

StackOverflow https://stackoverflow.com/questions/53649

  •  09-06-2019
  •  | 
  •  

Вопрос

Используя рефлексию, мне нужно исследовать пользовательскую DLL и создать в ней объект класса.

Каков простой способ сделать это?

Это было полезно?

Решение

Другие советы

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 — ваш друг для справки по размышлению.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top