У меня неизменяемый рекурсивный тип:
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
предназначен для использования в качестве вспомогательного средства. Я могу (и думаю, должен) отказаться от только для чтения
в полях и оставить "кишки" изменяемыми, но открытый интерфейс должен быть неизменным.
Является ли неизменяемость popsicle единственным как это сделать?
Я пытаюсь смоделировать коллекцию типов. У каждого типа есть имя и несколько атрибутов. У каждого атрибута есть имя и тип. Есть несколько взаимно рекурсивных типов, и именно здесь возникла эта проблема.