生成不可变循环数据结构

con*_*tor 7 immutability lazy-evaluation data-structures cyclic-graph

假设我有这个简单的类:

public class Pair {
    public readonly object first;
    public readonly object second;

    public Pair(object first, object second) {
        this.first = first;
        this.second = second;
    }
}
Run Code Online (Sandbox Code Playgroud)

生成对的循环图是不可能的.

你将如何创建一个类似的类,它仍然是不可变的,但可以某种方式用于生成循环图?

And*_*per 0

我认为对于您提出的类型的严格不可变类来说这是不可能的。我唯一能想到的就是添加一个带有设置器的属性,该设置器检查字段是否为空,如果为空则允许对其进行设置。通过这种方式,您可以将该first字段保留在第一个对象中null,并且在创建循环中的最后一个对象后,适当地设置该字段以关闭循环。一旦设置,它就不再为空,并且设置器将不再允许更改它。当然,该字段仍然可以通过类内部的代码进行更改,但从外部来看它基本上是不可变的。

像这样(C#):

public class Pair {
    private object first;
    private object second;

    public Pair(object first, object second) {
        this.first = first;
        this.second = second;
    }

    public object First {
        get { return first; }
        set 
        {
            if (first == null)
            {
                first = value;
            }
        }
    }

    // and a similar property for second
}
Run Code Online (Sandbox Code Playgroud)