Использование автоматически сгенерированного кода без предварительной генерации? - PullRequest
1 голос
/ 30 августа 2011

Можно ли использовать автоматически сгенерированный класс в том же прогоне, в котором он генерируется?Я пытаюсь достичь чего-то, что работает как фабрика, но для автоматически сгенерированных классов.Мой сценарий таков:

У меня есть файлы, в которых указано, что могут содержать некоторые результирующие файлы.Эти файлы результатов должны затем использоваться для вычисления статистики или чего-то другого.Теперь я хотел бы изменить данные, когда они будут прочитаны, но поскольку программное обеспечение не знает, какие части записаны в файл, оно не знает, как сохранить данные в файлах внутри.У меня есть читатель и писатель (созданный другом, который ОЧЕНЬ жанровый и слишком громоздкий для использования).Я подумал, что смогу использовать определения для автогенерации классов / структур.

например: классы, которые можно записать, это «A», «B» и «C».Скажите, что у "A" и "B" есть два и три ребенка соответственно.Давайте назовем их A0, A1, B0, B1, B2.

Теперь внутри программы я хотел бы написать:

A aObject = new A0();
aObject.variable1 = 2;
aObject.variable2 = "something";

B bObject = new B1();
bObject.SomeVariable = 42;
bObject.SomeOtherVariable = "someValue";

как называются переменные и какой тип данных представляют, записывается в файл спецификации.Например, в xml это будет что-то вроде:

<A0>
<Variable>
   <Name>variable1</Name>
   <type>int</type>
</Variable>
<Variable>
   <Name>variable2 </Name>
   <type>string</type>
</Variable>
</A0>

(то же самое с A1, B0, B1, B2 и т. Д.)

Теперь я хотел бы прочитать файл результатовЯ понимаю, что мне нужно автоматически сгенерировать A0, сгенерировать его, изменить данные (с помощью только что созданного класса / структуры A0) и затем снова записать в файл.

Мое решение для этого состоит в том, чтобы заранее создать все возможные классы / структуры и включить их.Проблема в том, что версии A, B и C изменяются или будут изменяться.

Вся помощь приветствуется:)

1 Ответ

1 голос
/ 30 августа 2011

Остальная часть вашего вопроса не имела для меня особого смысла, если честно, но ответить на ваш самый первый вопрос: да, вы можете это сделать. Посмотрите, например, здесь .

С уважением, Герт-Ян

...