Как я могу создать экземпляры неизменяемых взаимно рекурсивных объектов?

У меня неизменяемый рекурсивный тип:

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 единственным как это сделать?

Я пытаюсь смоделировать коллекцию типов. У каждого типа есть имя и несколько атрибутов. У каждого атрибута есть имя и тип. Есть несколько взаимно рекурсивных типов, и именно здесь возникла эта проблема.

20
задан Robert Harvey 31 May 2018 в 21:49
поделиться