Например, в реализации класса TPicture читаем:

procedure TPicture.DefineProperties(Filer: TFiler); function DoWrite: Boolean; . . . end;

begin Filer.DefineBinaryProperty('Data', ReadData, WriteData, DoWrite); end;

ReadData и WriteData здесь – private- метод ы класса TPicture. Ну как, не запутались? DefineProperties – это метод класса TPesistent, его мы переопределяем. DefineBinaryProperty – это метод класса TFiler, его мы в обязательном порядке вызываем в переопределённом DefineProperties.

Абстрактный класс TFiler является базовым для двух других: TReader и TWriter. Во время вызова TStream.WriteComponent создаётся экземпляр класса TWriter. Для каждого участвующего в сериализации объекта ссылка на TWriter сначала передаётся в метод DefineProperties, а затем – в метод ы, предназначенные для записи информации псевдосвойств. При вызове метод а TStream.ReadComponent объект типа TReader играет симметричную роль. Процедуры записи и чтения

Пара метод ов, указываемая в качестве аргументов TFiler.Define[Binary]Property, должна содержать в себе функциональность, отвечающую за запись и чтение информации соответствующих псевдосвойств. Если псевдосвойство было определено через DefineBinaryProperty, эти метод ы в качестве параметра получат экземпляр TMemoryStream, в который метод записи может записывать всё, что угодно – лишь бы метод чтения мог это прочесть. Однако это будет происходить уже без всякой помощи механизмов сериализации.

Если же мы воспользовались метод ом DefineProperty, то метод записи получит ссылку на объект Writer, а метод чтения – на объект Reader, метод ами которых можно будет пользоваться для того, чтобы упростить себе сохранение информации. Что это нам даёт? Дело в том, что, вызвав соответствующий метод объекта Writer (Reader), мы можем записать (прочитать) некоторое значение одного из следующих типов: Метод TWriter Метод TReader Сериализуемый тип

<<< 0 1 2 3 4 5 6 7 8 >>>
Хостинг от uCoz