Предыстория: Я включил (родительский) класс E с вложенным классом N с несколькими экземплярами N в E. В закрытом (родительском) классе я делаю некоторые вычисления, и я устанавливаю значения для каждого экземпляра вложенного класса. Что-то вроде этого:
n1.field1 = ...;
n1.field2 = ...;
n1.field3 = ...;
n2.field1 = ...;
...
Это один большой метод eval (в родительском классе). Мое намерение - поскольку все вычисления находятся в родительском классе (они не могут быть выполнены для каждого вложенного экземпляра, потому что это сделает код более сложным) - сделайте сеттеры доступными только для родительского класса и геттеров.
И теперь возникает проблема:
- когда я делаю сеттеры частными, родительский класс не может их использовать
- когда я делаю их общедоступными, каждый может изменить значения
- и у С# нет концепции друзей
- Я не могу передавать значения в конструкторе, потому что используется ленивый механизм оценки (поэтому экземпляры должны создаваться при их обращении - я создаю все объекты, а расчет запускается по запросу)
Я застрял - как это сделать (ограничьте доступ до родительского класса, не более, не менее)?
Я подозреваю, что сначала получу ответный вопрос: "но почему вы не разделили оценку на каждое поле" - так я отвечу на этот пример: как вы вычисляете минимальное и максимальное значение коллекции? Быстро? Ответ - за один проход. Вот почему у меня есть одна функция eval, которая выполняет вычисления и устанавливает сразу все поля.