ElementWalker Класс

Определение

Класс, позволяющий выполнять различные обходы модели, начиная с определенного элемента.

public ref class ElementWalker abstract
public abstract class ElementWalker
type ElementWalker = class
Public MustInherit Class ElementWalker
Наследование
ElementWalker
Производный

Конструкторы

ElementWalker(IElementVisitor, IElementVisitorFilter)

Конструктор, принимающий ElementVisitor.

ElementWalker(IElementVisitor, IElementVisitorFilter, Boolean)

Конструктор, принимающий ElementVisitor.

Свойства

BypassDemandLoading

Позволяет обходчику обходить требование загрузки при проходе

Filter

Получите или задайте IElementVisitorFilter для использования во время обхода

IncludeLinks

Возвращает значение true, если средство обхода включает ссылки на элементы в вызовах функции посетителя

InternalElementList

Получает внутренний список элементов, которые будут посещены

Store

Получает внутренний список элементов, которые будут посещены

Visitor

Получите или задайте IElementVisitor для использования во время обхода

Методы

DoTraverse(ModelElement)

Осуществляет обход модели, начиная с указанного начального элемента.

MarkForRemovalFromInternalElementList(ModelElement)

Помечает элемент для удаления из InternalElementList. Сначала выполняется маркирование, а затем удаление, чтобы индексы оставались действительными. При маркировании элементов как посещенных в хэш-таблице сохраняется индекс, указывающий порядок, в котором был посещен элемент. Если элементы были помещены в InternalElementList в этом порядке, элемент легко найти по индексу. Если нет, для поиска элемента будет использоваться линейный поиск.

MarkVisited(ModelElement)

Помечает элемент как уже посещенный

RemoveMarkedElements()

Удаляет элементы, которые помечены для удаления. Вызовите это в конце обхода, чтобы индексы в alreadyVisited будут оставаться допустимыми.

Reset()

Сброс посетителя, чтобы он мог начать обход заново. Это необходимо для очистки внутреннего списка ранее посещенных элементов.

ShouldVisitLinkAgain(ElementLink, ModelElement)

При просмотре связанных элементов заданного Куррентелемент, если мы нашли ссылку, которая была поставлена в очередь для посещения, эта функция сообщит вам, нужно ли снова ее посетить. Это происходит, если ссылка была посещена до того, как была посещена Куррентелемент (одна из ее ролеплайерс).

Для последовательностей замыканий мы гарантируем, что ссылка будет посещена только после посещения ролеплайерс (технически, мы гарантируем, что Интерналелементлист будет содержать ссылку после ролеплайерс). Рассмотрим этот сценарий: у нас есть элемент A, который является RolePlayer для 2 отношений Ахасбс и Часас. Во время обхода замыкания объект сначала приближается к B через Ахасбс. Однако у него нет свойства Prop-DELETE, поэтому он не будет посещен, но Ахасбс будет посещен. В дальнейшем в процессе обхода, с помощью Часас будет подход. На этот раз будет посещен, так как у него есть Prop-DELETE. Теперь мы получаем случай, когда Ахасбс был посещен до того, как была посещена одна из ролеплайерс (A). Чтобы устранить эту проблему, если пошаговые руководства покажут, что ссылка была открыта (или была поставлена в очередь для посещения), она должна проверить, было ли оно Просмотрено повторно (проверьте, было ли оно уже посещено до Куррентелемент). В этом случае необходимо удалить ссылку из Интерналелементлист, используя методы Маркфорремовалфроминтерналелементлист и Ремовемаркеделементс, и добавить ее в очередь для повторного посещения.

Traverse(ICollection<ModelElement>)

Осуществляет обход модели, начиная с указанных начальных элементов.

Traverse(ModelElement)

Осуществляет обход модели, начиная с указанного начального элемента.

Visited(ModelElement)

определяет, посещался ли данный элемент

Применяется к