C#에서 참조로 배열 또는 목록 전달
C#의 배열이나 목록은 기본적으로 참조로 전달되나요, 아니면 값으로 전달되나요? 이 질문은 성능 최적화를 고려할 때 자주 나타납니다. 답을 살펴보고 참조로 전달하는 것이 효율성을 위한 현명한 선택인지 토론해 보겠습니다.
정답:
C#에서는 배열과 목록이 참조가 아닌 값으로 전달됩니다. 즉, 실제 배열이나 목록 자체가 아니라 배열이나 목록에 대한 참조가 함수 호출에 복사됩니다.
배열이나 목록이 함수에 전달되면 힙의 참조가 스택에 복사됩니다. 참조가 메모리의 동일한 위치를 가리키기 때문에 함수 내의 배열 또는 목록 내용에 대한 변경 사항이 호출자에게 표시됩니다. 그러나 배열이나 목록 자체를 재할당하려는 시도(예: 참조 변경)는 호출자의 범위에 반영되지 않습니다.
<code class="language-c#">void Foo(int[] data) { data[0] = 1; // 调用者可以看到此更改 } void Bar(int[] data) { data = new int[20]; // 但看不到此更改 }</code>
위의 예에서 Foo는 배열의 첫 번째 요소를 수정하며 이 변경 사항은 호출자에게 표시됩니다. 그러나 Bar는 호출자에게 보이지 않는 새로운 배열을 데이터에 할당합니다.
참조로 전달하려면 'ref' 수정자를 사용하세요
호출자가 참조 자체의 변경 사항을 확인해야 하는 경우 ref 수정자를 사용할 수 있습니다. 매개변수가 ref로 전달되면 복사본이 아닌 실제 참조가 전달됩니다. 이는 함수 내의 참조에 대한 모든 변경 사항이 호출자의 범위에 반영된다는 것을 의미합니다.
<code class="language-c#">void Foo(ref int[] data) { data = new int[20]; // 调用者可以看到此更改 }</code>
최적화 제안
참조로 배열이나 목록을 전달하는 것이 성능을 향상시키는 방법처럼 보일 수 있지만 일반적으로 권장되지 않습니다. 값으로 전달하면 배열이나 목록에 대한 수정 사항이 함수 내에서 지역화되어 프로그램의 다른 부분이 의도치 않게 변경되는 것을 방지할 수 있습니다. 또한 최신 .NET 최적화 프로그램은 수동 개입 없이 값별 전달을 효율적으로 처리할 수 있는 경우가 많습니다.
위 내용은 C# 배열과 목록은 참조로 전달되나요, 아니면 값으로 전달되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!