2009-09-11 3 views
0

Например, у меня есть класс, и у меня есть его собственные свойства, и я передаю имя класса и имя свойства, которое нужно вызвать функцииКак написать динамический код VB.net?

Скажем, например, exp - это переменная, которую я передаю который содержит значение = «ClassA, Property1»

  Function Property2BCalled(byval exp as String) 

      dim classname = split(exp,",")(0) 
      dim propertyname=split(exp,",")(1) 
      dim value= classname.propertyname 

      End Function 

Я хочу сделать что-то подобное, приведенное выше.

+2

Существует мало случаев, когда такая вещь является хорошей идеей, и она обычно зарезервирована для фреймворков, которые требуют обхода рабочего процесса для проксирования или создания объектов. Почему вы хотите это сделать? –

+0

Это может показаться сумасшедшим, у меня есть проблема с локализацией при выполнении модульного тестирования в asp.net mvc, поскольку он выдает ошибку, которую виртуальный путь не найден для папки app_globalresources, и я не могу издеваться над этим, так что я я действительно сбрасывал все ресурсы в обычную папку, а оттуда я обращаюсь к ней, но теперь мне нужно написать if/else или выбрать случай для запуска файлов ресурсов, т.е. из какого файла ресурсов мне нужно взять информацию. , так что я подумал об этой идее сделать это. – kurozakura

ответ

0

Вы можете использовать отражение для выполнения этой задачи. Имейте в виду, что отражение медленно, но это можно сделать. Вы должны перечислять классы, доступные в вашей сборке, когда вы найдете совпадение имен, затем перечисляете свойства, а затем вызываете метод/свойства и т. Д.

Но может быть лучше определить интерфейс, а затем иметь общий подпись, с которой может взаимодействовать ваш проект, тогда вам нужно всего лишь Factory выкачать соответствующий экземпляр класса, который входит в ваши данные.

+0

Как получить тип для класса, для которого я отправляю имя строки класса? Dim A в виде строки = GetType (Classname) .getProperty (""). ПолучитьЗначение ("", Nothing) .ToString() бы дай мне тип, но им посылающий имя класса как строку, а – kurozakura

+0

Для каждого t As Type In [Assembly] .GetExecutingAssembly.GetTypes() Если t.Name = "yourclassname" Затем конец, если next –

Смежные вопросы