Интерфейс IModelObject (dbgmodel.h)
Одна из самых простых, но мощных вещей в модели данных заключается в том, что она стандартизирует определение того, что такое объект и как он взаимодействует с объектом. Интерфейс IModelObject инкапсулирует понятие объекта , независимо от того, является ли этот объект целым числом, значением с плавающей запятой, строкой, каким-либо сложным типом в целевом адресном пространстве отладчика или какой-либо концепцией отладчика, например понятием процесса или модуля.
Существует несколько различных вещей, которые можно хранить в IModelObject (или упаковать в них).
• Встроенные значения. IModelObject может быть контейнером для нескольких базовых типов: 8, 16, 32 или 64-разрядных целых чисел со знаком или без знака, логических значений, строк, ошибок или понятия пустого.
• Собственные объекты — IModelObject может представлять сложный тип (как определено системой типов отладчика) в адресном пространстве любого целевого отладчика.
• Искусственные объекты — IModelObject может быть динамическим объектом — словарем, если хотите: коллекция кортежей "ключ-значение-метаданные" и набор понятий, определяющих поведение, которое не просто представлено парами "ключ-значение".
• Свойства — IModelObject может представлять свойство, значение которого можно получить или изменить с помощью вызова метода. Свойство в IModelObject фактически является интерфейсом IModelPropertyAccessor, упакованным в IModelObject.
• Методы . IModelObject может представлять метод: то, что можно вызвать с набором аргументов и получить возвращаемое значение. Метод в IModelObject фактически является интерфейсом IModelMethod , упакованным в IModelObject
IModelObject не является объектом в изоляции. В дополнение к представлению одного из типов объектов, показанных выше, каждый объект имеет представление о цепочке родительских моделей данных. Эта цепочка ведет себя так же, как | Цепочка прототипов JavaScript. Вместо линейной цепочки прототипов, такой как JavaScript, каждый объект модели данных определяет линейную цепочку родительских моделей. Каждая из этих родительских моделей, в свою очередь, имеет другую линейную цепочку из собственного набора родительских элементов. По сути, каждый объект является агрегированием возможностей (свойств и т. д.) как самого себя, так и каждого объекта в этом дереве. При запросе определенного свойства, если объект, к которому он запрашивается, не поддерживает это свойство, запрос передается в линейном порядке каждому родительскому элементу по очереди. Это создает поведение, в котором поиск свойства разрешается путем поиска глубины в агрегированном дереве.
Расширяемость в этой объектной модели очень проста, учитывая это представление о том, что каждый объект является агрегатом самого себя и деревом родительских моделей. Расширение может войти и добавить себя в список родительских моделей для другого объекта. Это расширяет объект . Таким образом, можно добавить возможности к чему угодно: к конкретному экземпляру объекта или значения, собственному типу, концепции отладчика о том, что такое процесс или поток, или даже к понятию "все итерируемые объекты".
Наследование
IModelObject наследуется от IUnknown.
Методы
Интерфейс IModelObject содержит следующие методы.
IModelObject::AddParentModel Метод AddParentModel добавляет новую родительскую модель в заданный объект . |
IModelObject::AddRef Метод AddRef увеличивает количество ссылок для интерфейса объекта . Этот метод принадлежит интерфейсу IModelObject. |
IModelObject::ClearConcepts Метод ClearConcepts удалит все понятия из экземпляра объекта, указанного этим параметром. |
IModelObject::ClearKeys Метод ClearKeys удаляет все ключи и связанные с ними значения и метаданные из экземпляра объекта, указанного этим параметром. |
IModelObject::Compare Метод Compare сравнивает два объекта модели и возвращает указание на то, как эти объекты связаны. |
IModelObject::D ereference Метод Разыменования разыменовывает объект. |
IModelObject::EnumerateKeyReferences Метод EnumerateKeyReferences ведет себя аналогично методу EnumerateKeyValues, за исключением того, что он возвращает ссылки на перечисляемые ключи вместо значения ключа. |
IModelObject::EnumerateKeys Перечисляет ключи в поставщике динамических ключей. |
IModelObject::EnumerateKeyValues Метод EnumerateKeyValues является первым методом, к который клиент будет обращаться для перечисления всех ключей объекта. |
IModelObject::EnumerateRawReferences Метод EnumerateRawReferences перечисляет ссылки на все собственные дочерние элементы (поля, базовые классы и т. д.) данного объекта. |
IModelObject::EnumerateRawValues Метод EnumerateRawValues перечисляет все собственные дочерние элементы (поля, базовые классы и т. д.) данного объекта. |
IModelObject::GetConcept Метод GetConcept выполняет поиск концепции в объекте (или его родительской цепочке модели) и возвращает указатель интерфейса на интерфейс концепции. |
IModelObject::GetContext Метод GetContext возвращает контекст узла, связанный с объектом . |
IModelObject::GetContextForDataModel Метод GetContextForDataModel используется для получения сведений о контексте, которые были настроены при предыдущем вызове Метода SetContextForDataModel. |
IModelObject::GetIntrinsicValue Метод GetIntrinsicValue возвращает объект, который упаковается в объект IModelObject. |
IModelObject::GetIntrinsicValueAs Метод GetIntrinsicValueAs ведет себя так же, как метод GetIntrinsicValue, за исключением того, что он преобразует значение в указанный тип variant. |
IModelObject::GetKey Метод GetKey получает значение (и метаданные, связанные с) заданного ключа по имени. |
IModelObject::GetKeyReference Если объект или одна из его родительских моделей имеет ключ с именем в соответствии с аргументом key, это вернет ссылку на этот ключ. |
IModelObject::GetKeyValue Метод GetKeyValue является первым методом, к которым будет обращаться клиент, чтобы получить значение (и метаданные, связанные с) заданного ключа по имени. |
IModelObject::GetKind Метод GetKind возвращает тип объекта, упаковав его в IModelObject. |
IModelObject::GetLocation Метод GetLocation возвращает расположение собственного объекта. Хотя такое расположение обычно является виртуальным адресом в адресном пространстве целевого объекта отладки, это не обязательно. |
IModelObject::GetNumberOfParentModels Метод GetNumberOfParentModels возвращает количество родительских моделей, присоединенных к данному экземпляру объекта. |
IModelObject::GetParentModel Метод GetParentModel возвращает i-ю родительскую модель в цепочке родительской модели заданного объекта. |
IModelObject::GetRawReference Метод GetRawReference находит собственную конструкцию в заданном объекте и возвращает ссылку на нее. |
IModelObject::GetRawValue Метод GetRawValue находит собственную конструкцию в заданном объекте. Такой конструкцией может быть поле, базовый класс, поле в базовом классе, функция-член и т. д. |
IModelObject::GetTargetInfo Метод GetTargetInfo фактически представляет собой сочетание методов GetLocation и GetTypeInfo, возвращающих как абстрактное расположение, так и собственный тип данного объекта. |
IModelObject::GetTypeInfo Метод GetTypeInfo возвращает собственный тип заданного объекта. Если объект не имеет связанных с ним сведений о собственном типе, вызов по-прежнему будет выполнен успешно, но вернет значение NULL. |
IModelObject::IsEqualTo Метод IsEqualTo сравнивает контекст узла с другим контекстом узла. Если два контекста эквивалентны, возвращается указание на это. Обратите внимание, что это сравнение не равнозначно интерфейсу. |
IModelObject::QueryInterface Метод IModelObject::QueryInterface извлекает указатели на поддерживаемые интерфейсы объекта . |
IModelObject::Release Метод IModelObject::Release уменьшает количество ссылок для интерфейса объекта . |
IModelObject::RemoveParentModel RemoveParentModel удалит указанную родительскую модель из родительской цепочки поиска данного объекта. |
IModelObject::SetConcept Метод SetConcept поместит указанную концепцию в экземпляр объекта, указанный этим указателем. |
IModelObject::SetContextForDataModel Метод SetContextForDataModel используется реализацией модели данных для размещения данных реализации в объектах экземпляра. |
IModelObject::SetKey Метод SetKey — это метод, к которым будет обращаться клиент, чтобы создать ключ для объекта (и потенциально связать метаданные с созданным ключом). |
IModelObject::SetKeyValue Метод SetKeyValue является первым методом, к который будет обращаться клиент, чтобы задать значение ключа. Этот метод нельзя использовать для создания нового ключа в объекте . |
IModelObject::TryCastToRuntimeType Метод TryCastToRuntimeType запрашивает узел отладки для выполнения анализа и определения фактического типа среды выполнения (наиболее производного класса) данного объекта. |
Требования
Требование | Значение |
---|---|
Заголовок | dbgmodel.h |