C#中的字典键(可能在大多数语言中)必须是不可变的。
我现在考虑使我的键的值依赖于另一个对象的某些属性的可能性。
一般来说,不可变对象可能有指向另一个对象的指针 - 或者不是? 当我更改另一个对象时,不可变对象没有改变它的状态 但现在的行为可能会有所不同。
这是否允许不可变对象?
它被认为是不良做法还是相反的良好做法?
答案 0 :(得分:1)
你可以在一个不可变对象中有指针,这是浅与不可变性之间的区别。
答案 1 :(得分:0)
让对象持有对可变对象的不可变引用没有任何问题。归属,这有时可能是一种有用的模式。例如,集合可能会暴露许多枚举方法。实现这一目标的最简单方法可能是定义一些结构,每个结构包含一个项目:对集合的引用,并通过调用集合中的适当方法来实现IEnumerable.GetEnumerator。例如,结构MyMultiSortedKeyDictionary.EnumeratorByFirstKey将保存对MyMultiSortedkeyDictionary的引用,并通过在根集合上调用GetFirstKeyEnumerator来实现IEnumerable.GetEnumerator。结构.EnumeratorBySecondKey类似,但会调用GetSecondKeyEnumerator。两个结构都是不可变的,但每个结构都会包含对可变对象的引用。