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

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

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

Ответ 2

System.Reflection.Assembly - это класс, который вы хотите использовать. Он содержит много методов для итерации по типам, содержащимся в пользовательской DLL. Вы можете проходить через каждый класс, возможно, посмотреть, наследуется ли он от определенного интерфейса и т.д.

http://msdn.microsoft.com/en-us/library/system.reflection.assembly_members.aspx

Изучите метод Assembly.GetTypes() для получения списка типов или Assembly.GetExportedTypes() только для публичных.

Ответ 3

Вы можете создать экземпляр класса из объекта Type с помощью Activator.CreateInstance, чтобы получить все типы в dll, вы можете использовать Assembly.GetTypes

Ответ 4

Взгляните на эти ссылки:

http://www.java2s.com/Code/CSharp/Development-Class/Createanobjectusingreflection.htm

http://msdn.microsoft.com/en-us/library/k3a58006.aspx

В основном вы используете рефлексию для загрузки сборки, а затем найдите интересующий вас тип. После того, как у вас есть этот тип, вы можете попросить найти его конструкторы или другие методы/свойства. Когда у вас есть конструктор, вы можете вызвать его. Легко!

Ответ 5

Как уже было сказано, вам нужно вытолкнуть пространство имен System.Reflection.

Если вы заранее знаете местоположение/имя DLL, которое хотите загрузить, вам необходимо выполнить итерацию через Assembly.GetTypes().

В Pseudocode он будет выглядеть примерно так:

Создание и сборка объекта.

Итерации по всем типам, содержащимся в сборке.

Как только вы найдете тот, который вы ищете, вызовите его (CreateInstance)...

Используйте это с умом.

;)

У меня есть много кода Reflection, если вы хотите взглянуть вокруг, но задача действительно проста, и есть, по крайней мере, дюжина статей с образцами в дикой природе. (Aka Google). Несмотря на это, MSDN - ваш друг для Reflection Reference.