Интерфейсы постоянных объектов
Постоянный объект реализует один или несколько интерфейсов постоянных объектов. Клиенты используют интерфейсы постоянных объектов, чтобы сообщить этим объектам, когда и где хранить их состояние. Все интерфейсы постоянных объектов являются производными от IPersist, поэтому любой объект, реализующий любой интерфейс постоянного объекта, также реализует IPersist.
В настоящее время определены следующие интерфейсы постоянных объектов:
- IPersistStream
- IPersistStreamInit
- IPersist служба хранилища
- IPersistFile
- IPersistMoniker
- IPersistMemory
- IPersistPropertyBag
Реализующие средства выбирают, какие постоянные интерфейсы объектов поддерживает объект в зависимости от способа использования объекта. Не поддерживая интерфейсы постоянных объектов, реализующий фактически говорит: "Состояние этого объекта не может быть постоянно сохранено". Поддерживая один или несколько постоянных интерфейсов объектов, реализующий фактически говорит: "Состояние этого объекта можно постоянно хранить в одном или нескольких носителях хранилища данных".
Например, в следующей таблице перечислены несколько типов объектов, которые позволяют поддерживать различные интерфейсы постоянных объектов.
Категория | Интерфейсы постоянных объектов обычно поддерживаются |
---|---|
Моникеры |
IPersistStream |
Внедренные объекты OLE |
IPersist служба хранилища, IPersistFile |
Элементы управления ActiveX |
IPersistStreamInit, IPersist служба хранилища, IPersistMemory, IPersistPropertyBag, IPersistMoniker |
Объекты документов ActiveX |
IPersist служба хранилища, IPersistFile |
Кроме того, разработчики клиентов могут выбрать, какие постоянные интерфейсы объектов могут использовать клиент. Интерфейсы, которые использует клиент, обычно определяются тем, где клиент может хранить собственные данные. Клиент, который может хранить свои данные только в неструктурированном файле, вероятно, будет использовать только IPersistStreamInit, IPersistMoniker и IPersistPropertyBag. (IPersistStreamInit может заменить IPersistStream в большинстве приложений, так как он содержит это определение и добавляет метод инициализации.) Клиент, который может сохранить данные в структурированном файле хранилища, будет использовать IPersist служба хранилища.