Создание объекта без знания имени класса во время разработки - PullRequest
5 голосов
/ 10 сентября 2008

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

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

Ответы [ 5 ]

13 голосов
/ 10 сентября 2008

Попробуйте Activator.CreateInstance .

3 голосов
/ 10 сентября 2008

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

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

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

1 голос
/ 10 сентября 2008

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

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

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

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

Перебирать все типы, содержащиеся в сборке.

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

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

;)

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

1 голос
/ 10 сентября 2008

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

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

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

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

1 голос
/ 10 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...