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) |
определяет, посещался ли данный элемент |