2011-08-23 6 views
0

이와 함께 컬렉션을 swaping 것은 내가 Effective C# 책에서 본 예이다. 나는 그가 의미하는 것을 이해할 수 없었다.방어 사본

이제는 이해할 수 있다고 생각합니다. 컬렉션은 ref 유형입니다. "데이터 필드"의 소비자는 힙의 이전 저장소에 사본을 보유하고 있음을 기억하지 못합니다. "data"값 유형 인 경우 - 소비자 (데이터를 사용하는 다른 코드)는 데이터의 전체 복사본을 보유하고 있음을 기억하고 업데이트해야 할 때 다시 요청합니다.

바로?

+2

여기서 열심히 생각해 보는 것이 어렵습니다. 제발 좀 더 자세히 설명해주세요. –

답변

0

컬렉션은 참조 유형이므로 다른 지주 코드를 사용하면 이전 데이터가 표시됩니다.

개의 가능한 해결책 :

데이터 대신 = 임시 사용 data.Clear(); data.AddRange (temp) : 데이터 필드의 내용을 변경합니다.

또는 MyCollection 속성을 삭제하고 클래스를 IEnumerable로 구현하는 것이 좋습니다. 그 결과 캡슐화가 훨씬 잘됩니다.

+0

2 차 옵트는 어떻게 도움이됩니까? –

+0

클래스는 열거 형을 제어하는 ​​논리를 구현하여 PayrollData에 대한 액세스를 제한합니다. 따라서 데이터가 변경되는시기와 열거 형에서 진행되는 반복되는 상황을 정확히 제어 할 수 있습니다. –

+0

또한 다른 항목이 모든 항목의 데이터 필드를 지우는 instance.MyCollection.Clear()와 같은 상황을 피할 수 있습니다. –