ElementClosureWalker 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
在模型元素上生成闭包的查看程序
public ref class ElementClosureWalker sealed : Microsoft::VisualStudio::Modeling::BreadthFirstRolePlayerFirstElementWalker
public sealed class ElementClosureWalker : Microsoft.VisualStudio.Modeling.BreadthFirstRolePlayerFirstElementWalker
type ElementClosureWalker = class
inherit BreadthFirstRolePlayerFirstElementWalker
Public NotInheritable Class ElementClosureWalker
Inherits BreadthFirstRolePlayerFirstElementWalker
- 继承
构造函数
属性
| BypassDemandLoading |
允许遍历遍历时绕过请求加载 (继承自 ElementWalker) |
| ClosureList |
构成闭包的元素的结果列表 |
| Context |
提供用于关闭访问者的常规使用的上下文对象。 |
| Filter |
获取或设置在遍历期间使用的 IElementVisitorFilter (继承自 ElementWalker) |
| IncludeLinks |
如果查看器将在调用访问者函数时包含元素链接,则返回 true (继承自 ElementWalker) |
| InternalElementList |
获取将访问的元素的内部列表 (继承自 ElementWalker) |
| Store |
获取将访问的元素的内部列表 (继承自 ElementWalker) |
| Visitor |
获取或设置在遍历期间使用的 IElementVisitor (继承自 ElementWalker) |
方法
| DoTraverse(ModelElement) |
遍历模型(从指定的起始元素开始)。 (继承自 BreadthFirstRolePlayerFirstElementWalker) |
| MarkForRemovalFromInternalElementList(ModelElement) |
标记要从 InternalElementList 中删除的元素。 我们先标记,稍后再删除,以便索引保持有效。 将元素标记为 "已访问" 时,我们将在哈希表中存储一个索引,该索引告诉我们元素的访问顺序。 如果按顺序将元素放入 InternalElementList 中,则可以使用索引轻松找到元素。 如果不是,则将使用线性搜索来查找元素。 (继承自 ElementWalker) |
| MarkVisited(ModelElement) |
将元素标记为已访问 (继承自 ElementWalker) |
| RemoveMarkedElements() |
删除标记为要删除的元素。 在遍历结束时调用此项,以便 alreadyVisited 中的索引保持有效。 (继承自 ElementWalker) |
| Reset() |
重置访问者,使其可以再次开始遍历。 这对于清除以前访问的元素的内部列表是必需的。 (继承自 ElementWalker) |
| ShouldVisitLinkAgain(ElementLink, ModelElement) |
查看给定 currentElement 的相关元素时,如果找到已排队等待访问的链接,则此函数将告诉你是否需要再次访问。 如果在访问 (currentElement) 之前访问了该链接,该链接已被访问。 对于闭包查看器,我们保证仅在从技术上 (访问 roleplayers 之后访问该链接,我们保证 InternalElementList 将包含 roleplayers) 之后的链接。 请考虑这种情况:我们的元素 A 是2关系 AHasBs 和 CHasAs 的 roleplayer。 在关闭遍历期间,首先从 B 到 AHasBs。 但是,它并不会对其进行 "删除",因此不会访问它,而是访问 AHasBs。 稍后在遍历中,将从 C 通过 CHasAs 到达。 这次,因为它具有 "", 现在,我们得到了一个事例,其中,AHasBs 是在访问) 之前访问它的一个 roleplayers (。 若要解决此问题,如果查看器发现链接已被访问 (或已排队等待访问) ,则它应检查是否应再次访问它 (检查是否应再次访问它检查是否已在 currentElement) 之前访问过它。 如果是这样,则应使用方法 MarkForRemovalFromInternalElementList 和 RemoveMarkedElements 从 InternalElementList 中删除链接,并将其添加到要再次访问的队列。 (继承自 ElementWalker) |
| Traverse(ICollection<ModelElement>) |
遍历模型(从指定的起始元素开始)。 (继承自 ElementWalker) |
| Traverse(ModelElement) |
遍历模型(从指定的起始元素开始)。 (继承自 ElementWalker) |
| Visited(ModelElement) |
确定是否已访问给定元素 (继承自 ElementWalker) |