C # вложенные частные классы - PullRequest
1 голос
/ 29 июня 2011

Я создаю свою собственную очередь приоритетов. Это не типичная очередь с приоритетами, в которой элементы вставляются с заданным приоритетом. Скорее элементы могут быть добавлены в очередь, и они начинаются с наивысшим приоритетом (скажем, у нас есть 5 очередей, очередь 1 = наивысший приоритет, очередь 5 = ​​наименьший)), поэтому элемент добавляется в очередь 1 изначально.

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

1) Есть предложения по улучшению интерфейса? Мне не нравится извлекать элемент из вызова next (), а затем предоставлять обратную связь с другим вызовом функции. Существует слишком много места для ошибки, когда состояние испортилось. (т.е. пользователь не сообщает результат до получения следующего элемента ... и т. д.). Кроме того, было бы желательно, чтобы это было потокобезопасным.

2) Я использую закрытый вложенный класс, который обертывает интересующие меня элементы, а также некоторые атрибуты, связанные с каждым элементом, для отслеживания статистики по элементу (например, счетчик проходов / неудач и т. Д.) И хотел бы знаете, есть ли способ получить доступ к внешним членам класса из внутреннего класса?

1 Ответ

1 голос
/ 29 июня 2011

Не уверен, что я точно понимаю вопрос, но что не так с next (), не ожидающим возвращенного отзыва?Пользователи структуры вытаскивают элемент next () из очереди и затем отправляют элемент (), когда они готовы.Между тем, другие пользователи также могут извлекать элементы next () асинхронно.Очередь обрабатывает вызовы по мере их поступления. Если это не поможет, не могли бы вы объяснить проблему с обработкой состояния более подробно?

...