2014-09-06 2 views
-3

Я столкнулся с «проблемой» при разработке класса узлов для 2D-дерева BSP. Ниже приведен список вещей, которые я хочу выполнить.Как установить статические поля readonly динамически?

  1. Я хочу, чтобы все узлы имели одинаковое значение для некоторых своих полей.
  2. Я хочу, чтобы эти поля были только для чтения, так как было бы плохо/не иметь смысла для значения любого поля, которое будет изменено после создания первого узла в дереве.
  3. Я хочу иметь возможность установить эти значения перед построением дерева.

Решение пункта 1 состоит в том, чтобы сделать поля статическими. Создание полей static readonly (точки 1 + 2) означает, что значения должны быть установлены либо напрямую, либо в статическом конструкторе. Установка значений в статическом конструкторе с использованием некоторого файла конфигурации/класса/любого параметра. Является ли «правильным»/единственным способом?

Отредактировано для удаления текста о нескольких деревьях с различными значениями узлов, поскольку оно делает всю цель бесполезной статическими полями.

+0

Как насчет класса для дерева и другого для узлов внутри дерева? Узлы могут быть построены со ссылкой на дерево и, следовательно, их общие значения для этого конкретного дерева. – HABO

+0

@HABO Да. Уже есть древовидный класс. Решение так просто. По какой-то причине мой мозг был заперт в мысли о сохранении значений в классе узлов. – user1323245

ответ

2

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

У узлов есть ссылка на само дерево? Тогда вы можете предоставить свойство, подобное:

public int MyProperty 
{ 
    get 
    { 
     return this._tree.CommonValue; 
    } 
} 
+0

+1 для правильного указания, что 'static' унифицирует его на слишком высоком уровне. –

+0

Узлы в настоящее время не имеют ссылки на дерево. Это, безусловно, вариант. Я также только теперь понял, что, добавив, говоря о нескольких деревьях к вопросу после первоначального проекта, он делает статические поля бесполезными, как вы указали. Изменит вопрос, чтобы удалить эту часть. – user1323245