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)
生成对的循环图是不可能的.
你将如何创建一个类似的类,它仍然是不可变的,但可以某种方式用于生成循环图?
我认为对于您提出的类型的严格不可变类来说这是不可能的。我唯一能想到的就是添加一个带有设置器的属性,该设置器检查字段是否为空,如果为空则允许对其进行设置。通过这种方式,您可以将该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)