문자열은 참조 유형으로 간주되지만 값처럼 작동 할 수 있습니다. 얕은 복사 때 수동으로 또는 MemberwiseClone(), 문자열을 처리하는 방법? 그들은 사본과 마스터로부터 분리되어 격리되어 있다고 간주됩니까?C#에서 무언가를 복사 할 때 문자열이 어떻게 작동합니까?
15
A
답변
40
문자열은 참조 유형입니다. 그러나 그들은 변경할 수 없습니다 (변경할 수 없습니다). 따라서 값으로 복사하거나 참조로 복사하면 상관 없습니다.
얕은 복사가 수행되면 참조가 복사되지만 변경할 수 없으므로 두 개체에 동시에 적용 할 수 없습니다.
6
참조 ("포인터"로 생각) 만 복사 할 수 있습니다. 두 개의 참조는 분리되어 있지만 (동일한 값을 가지게됩니다) 단 하나의 문자열 객체 만 있습니다.
21
이 고려 :
public class Person
{
string name;
// Other stuff
}
당신이 MemberwiseClone를 호출하는 경우, 당신은 사람의 두 개의 인스턴스, 그러나 그들의 name
변수하게 될 겁니다 뚜렷한 반면, 같은 값을가집니다 - 그들은 참조 것 같은 캐릭터 라인 인스턴스 이것은 얕은 복제이기 때문입니다.
두 개의 변수 자체가 분리되어 있기 때문에 인스턴스 중 하나에서 이름을 변경하더라도 다른 인스턴스에는 영향을주지 않습니다. 다른 인스턴스를 참조하기 위해 이들 중 하나의 값을 변경하는 것입니다.
관련 문제
- 1. C에서 매 초마다 무언가를 어떻게 실행하나요?
- 2. Object c에서 오브젝트 복사가 어떻게 작동합니까?
- 3. 링크 할 때 라이브러리 의존성은 어떻게 작동합니까?
- 4. 그룹과 작업 할 때 Regex.Split은 어떻게 작동합니까?
- 5. 자동으로 복사 할 때
- 6. 어떻게 C에서 사전에 파일을 복사 할 수 있습니다 #
- 7. C에서 "변수 보호"란 무엇입니까? 어떻게 작동합니까?
- 8. Objective-C에서 반환 구조체는 정확히 어떻게 작동합니까?
- 9. 루틴에서 무언가를 반환 할 때 유용한 방법
- 10. CheckBoxList의 항목을 클릭 할 때 무언가를 표시해야합니다.
- 11. C에서 Dictionary에 ResourceDictionary 복사
- 12. C에서 포인터 복사
- 13. C에서 함수 오버로딩이 작동합니까?
- 14. C에서 배열 복사
- 15. C에서 배열 복사 반전
- 16. 복사 할 때 모든 파티션이 누락되었습니다.
- 17. 대리인이있을 때 respondsToSelector는 어떻게 작동합니까?
- 18. 복사 할 때 배열에서 개체를 해제 할 책임은 누구에게 있습니까?
- 19. 문제 메모리를 복사 할 때
- 20. ASP.NET 처음로드 할 때 쿼리 문자열이 제거됩니다.
- 21. c에서 문자열이 "GET"또는 "POST"로 시작하는지 어떻게 확인합니까?
- 22. mousemove가 Javascript에서 어떻게 작동합니까?
- 23. 목록 항목을 원본에서 대상으로 복사 할 때 폴더 복사
- 24. gedit에서 오픈 오피스로 복사 할 때 어떻게 포맷을 유지합니까?
- 25. 루비로드 경로에 무언가를 추가
- 26. 인수 전달은 어떻게 작동합니까?
- 27. 캐시 기능 핸들러를 정의 할 때 Smarty는 어떻게 작동합니까?
- 28. ajax를 통해 인덱스를 반환 할 때 mvc는 어떻게 작동합니까?
- 29. 함수 결과를 루핑 할 때 foreach는 어떻게 작동합니까?
- 30. Thread.sleep()은 여러 스레드에서 호출 할 때 어떻게 작동합니까?
그래서 복사 객체의 문자열을 변경하면 새 참조가있는 새 문자열이 만들어 집니까? 그래서 oldString = oldString + "A"와 같은 것을 만들 때, 새로운 참조로 새로운 객체를 생성하고 있습니까? – danmine
... 이것은 String.Replace가 문자열을 변경하는 대신 새 문자열을 반환해야하는 이유를 설명합니다. – stusmith
변경 가능한 문자열이 필요한 경우 StringBuilder 사용을 고려하십시오. – stusmith