Как ссылаться на модуль (во время выполнения), если у меня есть только имя строки в Delphi?

У меня есть типы в различающихся единицах с тем же именем, и у меня есть имя единицы в строке. Мне нужно получить доступ к конкретному типу этого устройства. Как я могу это сделать?

Пример:

unit Unit1

type
   TFooType = (
      bar1,
      bar2
   );

тогда у меня есть другой блок

unit Unit2

type
   TFooType = (
      foo1,
      foo2,
      foo3
   );      

И где-то в моем коде у меня есть строковая переменная "UnitName" со значением "Unit1" внутри нее, и я хочу получить доступ к типу "TFooType" Unit1 через переменную.

Я использую Delphi 2007

Извините за мой плохой английский.

Заранее спасибо.

3 ответа

Вы не можете выбрать, какие единицы включить во время выполнения. Единицы - это концепция времени компиляции.

Кроме того, ваши два типа, несмотря на то, что имеют одно и то же базовое имя, являются совершенно разными типами. В другом месте вашего кода вы не можете иметь переменную типа TFooType и произвольно решить, стоит ли ему присваивать значения из обеих этих единиц. Переменная может содержать значения только одного типа.

Вам придется подумать о каком-то другом способе выполнения вашей настоящей задачи. Я приглашаю вас опубликовать новый вопрос, описывающий вашу настоящую задачу.

@Hrukai, Точно так же, как с lego, ты можешь многое сделать, но кое-что просто не было предназначено для такого использования.

Похоже, ваша конечная цель - получить доступ к типу, а ваша отправная точка - это имя переменной. Если бы вы реализовали ваши переменные как классы (ООП), вы могли бы просто сделать Obj.ClassName, чтобы найти его тип... но также, если бы вы выбрали классы для своей реализации, я предсказываю, что эта необходимость (для доступа к типу из переменной) никогда не возникало в первую очередь.

Не поддавайтесь желанию создать новый шаблон и используйте силу классов. http://www.delphibasics.co.uk/Article.asp?Name=OOExample

Лучшее, что вы могли бы сделать, было бы что-то вроде if name='Unit1' then T := Unit1.TFoo и т.д. Но что вы можете сделать с T тем не мение? Поскольку перечисленные типы из разных единиц отличаются, трудно представить, что можно что-либо T, На самом деле, как бы вы даже определить T? Единственное, что я мог бы себе представить, это вернуть информацию о типах, но сейчас я позволяю своему воображению иссякнуть!

Другие вопросы по тегам