Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.02.24;
Скачать: [xml.tar.bz2];

Вниз

Подскажите   Найти похожие ветки 

 
Бо   (2008-01-31 17:10) [0]

У меня в проекте есть несколько классов образованных таким образом, к примеру:
TFirstClass = class(TObject)
TSecondClass = class(TFirstClass)

TNextClass1 = class(TSecondClass)
TNextClass2 = class(TSecondClass)
..
TNextClass9 = class(TSecondClass)


Конечные классы (TNextClass1..TNextClass9) - отвечают за свой формат или скажем алгоритм, ну т.е. на выходе этих классов уникальные данные которые потом можно прочитать только этим же классом.

После обработки, я сохраняю данные в файл. Но мне нужно также открывать файл и отдавать содержимое необходимому классу.

Вопрос такой. Возможоли как-то (я не знаю, у меня нет идей) при сохранении записывать идентификатор класса, а потом, по идентификатору создавать автоматически нужный экземпляр класса и подгружать в него данные для чтения.

Я не говорю про банальную проверку:
case FileDataType of
1: ..TNextClass1.Create;
2: ..TNextClass2.Create;


Что подскажете?


 
Jeer ©   (2008-01-31 17:15) [1]

Сделай не банальную проверку, но без проверки никак.


 
Palladin ©   (2008-01-31 17:21) [2]


> Вопрос такой. Возможоли как-то (я не знаю, у меня нет идей)
> при сохранении записывать идентификатор класса, а потом,
> по идентификатору создавать автоматически нужный экземпляр
> класса и подгружать в него данные для чтения.

запросто...

создаем систему классов с виртуальным конструктором, и классом классов
создаем карту идентификаторов и классов
создаем ридер который по считаному идентификатору будем определять необходимый класс, и потом создавая его передавать ему на вход данные...


 
Palladin ©   (2008-01-31 17:24) [3]

вообще говоря на этом приципе построена огромная подсистема VCL отвечающая за сериализацию форм и вообще объектов классов наследников TPersistent, я описал лишь очень кратко суть схемы


 
Ins ©   (2008-01-31 17:37) [4]

Угу. Я бы тоже сделал виртуальный конструктор у TSecondClass, классовую ссылку (class of TSecondClass), а предком у них бы сделал бы не TObject, а TPersistent, чтобы классы можно было находить в неком реестре по имени с помощью GetClass или FindClass. Можно конечно и от TObject, но тогда придется делать свой механизм регистрации/поиска. Далее в файл записывать имя класса, потом читать его, и создавать экземпляр как-нибудь так:
type
 TSecondClassRef = class of TSecondClass;
....
var
 ClassRef: TSecondClassRef;
 NameOfClass: String;
 Inst: TSecondClass;
begin
 ...
 NameOfClass := ...
 ClassRef := FindClass(NameOfClass);
 Inst := ClassRef.Create;
 // тут работаем с экземпляром Inst. Inst - экземпляр того класса, имя которого было записано в файл
 ...
end;



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.02.24;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.041 c
2-1201780574
mikola
2008-01-31 14:56
2008.02.24
коментарий к картинке


15-1200748755
Putnik
2008-01-19 16:19
2008.02.24
Статьи по работе с указателями


2-1201622654
Dark
2008-01-29 19:04
2008.02.24
Dom парсер для XML


15-1200760437
cartman315
2008-01-19 19:33
2008.02.24
Delphi и flash.ocx


2-1201541016
Inslave
2008-01-28 20:23
2008.02.24
Ini + checbox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский