Section 31.2: 두개의 다른 변수에 할당된 값이 함께 변경되는 예제
public static void Main(string[] args) {
var studentList = new List < Student > ();
studentList.Add(new Student("Scott", "Nuke"));
studentList.Add(new Student("Vincent", "King"));
studentList.Add(new Student("Craig", "Bertt"));
// 이후 출력에 사용할 별도의 리스트를 생성한다
var printingList = studentList; // 새로 생성된 리스트 객체이지만, 내부적으로는 동일한 Student 객체들을 가지고 있다
// 각 이름들에서 발견된 오타를 수정한다
studentList[0].LastName = "Duke";
studentList[1].LastName = "Kong";
studentList[2].LastName = "Brett";
// 이제 리스트를 출력한다
PrintPrintingList(printingList);
}
private static void PrintPrintingList(List < Student > students) {
foreach(Student student in students) {
Console.WriteLine(string.Format("{0} {1}", student.FirstName, student.LastName));
}
}
이 예제에서, printingList
리스트는 학생들의 이름에 존재하는 오타를 수정하기 전에 생성되었지만, PrintPrintingList()
메소드 실행 시 오타가 교정된 이름들이 출력됨을 확인할 수 있다:
Scott Duke
Vincent Kong
Craig Brett
이는 바로 두 리스트가 모두 동일한 학생 객체들에 대한 참조값을 가지고 있기 때문이다. 따라서 실제 참조의 대상이 되는 Student
객체의 값이 변경되면, 두개의 리스트 모두에 해당 변경사항이 전파된다.
아래 코드는 Student
클래스의 대략적인 모습이다.
public class Student {
public string FirstName {
get;
set;
}
public string LastName {
get;
set;
}
public Student(string firstName, string lastName) {
this.FirstName = firstName;
this.LastName = lastName;
}
}
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.
[출처] https://books.goalkicker.com/CSharpBook/
반응형
'번역 > C# Notes for Professionals' 카테고리의 다른 글
31.4: Reference 타입에 대한 할당 (assignment) 작업 (0) | 2021.10.28 |
---|---|
31.3: ref 파라미터와 out 파라미터 비교 (0) | 2021.10.21 |
31.1: ref 키워드를 사용해 매개변수를 참조로 전달하기 (pass by reference) (0) | 2021.10.19 |
30.2: IEnumerable<int> (0) | 2021.10.18 |
30.1: 사용자 구현 Enumerator 와 IEnumerable (0) | 2021.09.30 |