Поделиться через


Интерфейсы постоянных объектов

Постоянный объект реализует один или несколько интерфейсов постоянных объектов. Клиенты используют интерфейсы постоянных объектов, чтобы сообщить этим объектам, когда и где хранить их состояние. Все интерфейсы постоянных объектов являются производными от IPersist, поэтому любой объект, реализующий любой интерфейс постоянного объекта, также реализует IPersist.

В настоящее время определены следующие интерфейсы постоянных объектов:

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

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

Категория Интерфейсы постоянных объектов обычно поддерживаются
Моникеры
IPersistStream
Внедренные объекты OLE
IPersist служба хранилища, IPersistFile
Элементы управления ActiveX
IPersistStreamInit, IPersist служба хранилища, IPersistMemory, IPersistPropertyBag, IPersistMoniker
Объекты документов ActiveX
IPersist служба хранилища, IPersistFile

Кроме того, разработчики клиентов могут выбрать, какие постоянные интерфейсы объектов могут использовать клиент. Интерфейсы, которые использует клиент, обычно определяются тем, где клиент может хранить собственные данные. Клиент, который может хранить свои данные только в неструктурированном файле, вероятно, будет использовать только IPersistStreamInit, IPersistMoniker и IPersistPropertyBag. (IPersistStreamInit может заменить IPersistStream в большинстве приложений, так как он содержит это определение и добавляет метод инициализации.) Клиент, который может сохранить данные в структурированном файле хранилища, будет использовать IPersist служба хранилища.

Инициализация постоянных объектов