2011-02-08 29 views
0

C#中的字典鍵(可能在大多數語言中)必須是不可變的。指針是否允許在不可變的對象中?

我認爲現在可以使我的密鑰的價值取決於另一個對象的某些屬性。

一般來說,一個不可變的對象可能有一個指向另一個對象的指針 - 或者不是?
當我更改這個其他對象時,不可變對象沒有改變它的狀態。
但現在的行爲可能會有所不同。

這是否允許用於不可變對象?
它被認爲是不好的做法或相反的良好做法?

+0

我不確定我是否同意「一般而言,不可變對象可能有指向另一個對象的指針」,因爲它允許更改引用的對象,這實際上改變了不可變對象「狀態」。你有這種類型的不可變對象的例子嗎? – Tony

+0

@Tony:這是我的觀點,我想知道這是怎麼回事(正在考慮使用指針,沒有例子)。所以你說:一個指針不允許在一個不可變的對象中? – Gerard

回答

0

沒有什麼不妥具有對象保持一個不變的參照可變對象。印象深刻的是,這有時可能是一種有用的模式。例如,一個集合可能會暴露多種枚舉方法。實現此目的最簡單的方法可能是定義多個結構,每個結構都包含一個項目:對集合的引用,並通過調用集合中的適當方法實現IEnumerable.GetEnumerator。例如,結構MyMultiSortedKeyDictionary.EnumeratorByFirstKey將保存對MyMultiSortedkeyDictionary的引用,並通過調用根集合上的GetFirstKeyEnumerator來實現IEnumerable.GetEnumerator。結構.EnumeratorBySecondKey將類似,但會調用GetSecondKeyEnumerator。這兩個結構都是不可變的,但每個結構都會持有對可變對象的引用。

相關問題