목록 이해
제공된 코드는 목록과 함께 참조 유형을 사용할 때 흔히 발생하는 함정을 보여줍니다. 참조 유형인 Tag
클래스는 변수가 객체 자체의 복사본이 아닌 객체의 메모리 위치에 대한 참조를 보유한다는 의미입니다.
루프 내에서 동일한 _tag
인스턴스가 반복적으로 수정됩니다. 목록에 추가할 때마다 새로운 Tag
객체가 생성되지 않습니다. 대신 동일 _tag
객체에 대한 또 다른 참조를 추가합니다. 따라서 최종 목록에는 의 마지막_tag
수정된 상태를 가리키는 여러 참조가 포함되어 있습니다.
struct
을 사용하면 문제가 해결되는 이유
public class Tag
을 public struct Tag
으로 변경하면 구조체가 값 유형이므로 문제가 해결됩니다. 구조체가 할당되면 구조체 데이터의 사본이 생성됩니다. 결과적으로 루프를 반복할 때마다 완전히 독립적인 _tag
인스턴스가 생성됩니다. 한 인스턴스를 수정해도 다른 인스턴스에는 영향을 주지 않으므로 고유한 Tag
개체
파생 컬렉션 클래스 관련성
문제는 TagCollection
클래스 디자인에 고유한 것이 아닙니다. TagCollection
클래스 자체가 올바르게 구현된 것으로 보입니다. 핵심 문제는 목록을 채우는 루프 내에서 _tag
인스턴스가 처리되는 방식, 특히 단일 참조 유형 인스턴스의 반복 수정에 있습니다.
위 내용은 참조 유형을 사용할 때 목록에 새 값을 추가하면 이전 값을 덮어쓰는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!