У меня есть неизменяемый рекурсивный тип:
public sealed class Foo
{
private readonly object something;
private readonly Foo other; // might be null
public Foo(object something, Foo other)
{
this.something = something;
this.other = other;
}
public object Something { get { return something; } }
public Foo Other { get { return other; } }
}
Мне нужно создать два объекта этого типа, которые относятся друг к другу, т.е. a.Other == b && b.Other == a
.
Я не хочу отказываться от инвариантов неизменяемости, потому что Foo
предназначен для использования в качестве мухи. Я могу (и я думаю, должен) отказаться от readonly
в полях и оставить "guts" изменчивым, но открытый интерфейс должен быть неизменным.
Является неизменность popsicle единственным способом сделать это?
EDIT. Я пытаюсь смоделировать коллекцию типов. Каждый тип имеет имя и несколько атрибутов. Каждый атрибут имеет имя и тип. Существует несколько взаимно-рекурсивных типов и что там возникла эта проблема.