ElementClosureWalker 类

定义

在模型元素上生成闭包的查看程序

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
继承

构造函数

ElementClosureWalker(Partition, ClosureType, ICollection<ModelElement>)

创建 ElementVisitor 并调用 base 的构造函数。 这会导致广泛的第一次遍历,并具有元素链接的 visitation。

ElementClosureWalker(Partition, ClosureType, ICollection<ModelElement>, Boolean, IEnumerable<DomainRoleInfo>, Boolean)

创建 ElementVisitor 并调用 base 的构造函数。 这会导致广泛的第一次遍历,并具有元素链接的 visitation。

ElementClosureWalker(Partition, ClosureType, ICollection<ModelElement>, Boolean, IEnumerable<DomainRoleInfo>, IEnumerable<DomainRoleInfo>, IList<ModelElement>)

创建 ElementVisitor 并调用 base 的构造函数。 这会导致广泛的第一次遍历,并具有元素链接的 visitation。

ElementClosureWalker(Partition, ClosureType, ICollection<ModelElement>, Boolean, IEnumerable<DomainRoleInfo>, IList<DomainRoleInfo>, Boolean)

创建 ElementVisitor 并调用 base 的构造函数。 这会导致广泛的第一次遍历,并具有元素链接的 visitation。

ElementClosureWalker(Partition, ClosureType, ICollection<ModelElement>, IEnumerable<DomainRoleInfo>)

创建 ElementVisitor 并调用 base 的构造函数。 这会导致广泛的第一次遍历,并具有元素链接的 visitation。

ElementClosureWalker(Partition, ClosureType, ICollection<ModelElement>, IEnumerable<DomainRoleInfo>, IList<DomainRoleInfo>)

创建 ElementVisitor 并调用 base 的构造函数。 这会导致广泛的第一次遍历,并具有元素链接的 visitation。

属性

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)

适用于