2011-02-08 2 views
0

C#의 사전 키 (대부분의 언어에서 가능)는 불변이어야합니다.불변 개체에 허용되는 포인터입니까?

이제는 다른 키의 일부 속성에 종속적 인 키 값을 만들 가능성을 고려합니다.

일반적으로 불변 개체는 다른 개체에 대한 포인터를 가질 수 있습니까?
다른 개체를 변경할 때 불변 개체의 상태가 변경되지 않았습니다.
하지만 동작이 다를 수 있습니다.

변경할 수없는 개체에 허용됩니까?
나쁜 실행 또는 반대로 좋은 연습으로 간주됩니까?

+0

나는 "불변 개체가 다른 개체에 대한 포인터를 가질 수있다"라는 말에 동의하지 않습니다. 참조 된 개체가 변경되어 사실상 불변 개체 "상태"가 변경 될 수 있습니다. 이 유형의 불변 객체의 예가 있습니까? – Tony

+0

@ 토니 : 그게 내 포인트 야, 그게 (포인터를 사용하는 것을 고려하고 있었는지 궁금해했다. 예제가 없다). 그래서 당신이 말 : 포인터가 불변의 객체에서 허용되지 않습니다? – Gerard

답변

0

가 변경 가능한 객체에 대한 불변의 참조를 보관 유지 게시 MSDN 블로그에서보세요. Indded, 때로는 유용한 패턴이 될 수 있습니다. 예를 들어, 콜렉션은 수많은 열거 메소드를 노출 할 수 있습니다. 이를 달성하는 가장 간단한 방법은 컬렉션에 대한 참조 인 하나의 항목을 보유하는 여러 구조를 정의하고 컬렉션에서 적절한 메서드를 호출하여 IEnumerable.GetEnumerator를 구현하는 것입니다. 예를 들어 MyMultiSortedKeyDictionary.EnumeratorByFirstKey 구조는 MyMultiSortedkeyDictionary에 대한 참조를 보유하고 루트 컬렉션에서 GetFirstKeyEnumerator를 호출하여 IEnumerable.GetEnumerator를 구현합니다. 구조체 .EnumeratorBySecondKey도 비슷하지만 GetSecondKeyEnumerator를 호출합니다. 두 구조는 모두 변경할 수 없지만 각 구조는 변경 가능한 객체에 대한 참조를 보유합니다.

관련 문제