IModelObject2 接口 (dbgmodel.h)

IModelObject2 接口封装对象的概念 -- 该对象是否为整数、字符串、调试器的目标地址空间中的一些复杂类型。

此版本 2 的接口支持具有相同签名的所有以前的方法,并包括提供新增功能的其他新方法。 新方法列在该接口的节末尾的标头中。

遗产

IModelObject2 继承自 IModelObject。

言论

数据模型最基本但最强大的内容之一是,它标准化对象的定义,以及如何与对象交互。 IModelObject 接口封装对象的概念 -- 该对象是整数、浮点值、字符串、调试器目标地址空间中的一些复杂类型,还是一些调试器概念(如进程或模块的概念)。

IModelObject 中可以保存几个不同的内容:或装箱到 IModelObject 中:

• 固有值 - IModelObject 可以是许多基本类型的容器:8、16、32 或 64 位有符号或无符号整数、布尔值、字符串、错误或空的概念。

• 本机对象 - IModelObject 可以在调试器的地址空间内表示复杂类型(由调试器的类型系统定义)

• 合成对象 - IModelObject 可以是一个动态对象 -- 一个字典(如果你将:键/值/元数据元组的集合和一组概念,这些概念定义不简单地由键/值对表示的行为)。

• 属性 - IModelObject 可以表示属性:可以使用方法调用检索或更改其值的内容。 IModelObject 中的属性实际上是装箱到 IModelObject 中的 IModelPropertyAccessor 接口

• 方法 - IModelObject 可以表示方法:可以使用一组参数调用并获取返回值。 IModelObject 中的方法实际上是一个装箱到 IModelObject 中的 IModelMethod 接口

IModelObject 不是隔离的对象。 除了表示上面所示的对象类型之一外,每个对象还具有父数据模型链的概念。 此链的行为非常类似于 |JavaScript 原型链。 每个数据模型对象定义父模型的线性链,而不是 JavaScript 等原型的线性链。 每个父模型反过来都有其自己的一组父级的另一个线性链。 从本质上讲,每个对象都是自身和此树中每个对象的功能(属性等...)的聚合。 查询特定属性时,如果查询对象不支持该属性,则查询将按线性顺序传递给每个父级。 这会创建一种行为,即通过对聚合树进行深度优先搜索来解析属性的搜索。

鉴于每个对象都是自身和父模型树的聚合,此对象模型中的扩展性非常简单。 扩展可以传入并添加到另一个对象的父模型列表中。 执行此操作会扩展对象。 通过这种方式,可以将功能添加到任何内容:对象或值的特定实例、本机类型、调试器对进程或线程的概念,甚至是“所有可迭代对象”的概念。

要求

要求 价值
标头 dbgmodel.h

另请参阅

调试器数据模型C++接口概述