C#에서 참조 전달: 배열 및 목록
C#을 포함한 많은 프로그래밍 언어는 참조 유형과 값 유형을 제공합니다. 배열과 목록의 전달 메커니즘과 관련하여 일반적인 질문이 발생합니다. 기본적으로 참조로 전달됩니까, 아니면 값으로 전달됩니까?
C#의 배열과 목록
C#에서는 배열과 목록이 참조 유형입니다. 즉, 관리되는 힙에 저장되고 포인터로 참조됩니다. 참조 유형을 전달할 때 참조 자체는 값으로 전달됩니다.
기본 전달 메커니즘
따라서 C#에서는 배열과 목록이 기본적으로 값으로 전달됩니다. 이 전달 메커니즘은 메서드나 함수 내에서 전달된 배열이나 목록의 내용에 대한 모든 변경 사항이 호출 코드에 반영된다는 것을 의미합니다. 그러나 메서드나 함수 내에서 전달된 배열이나 목록을 다시 할당하면 호출 코드에 표시되지 않습니다.
예
다음 코드 조각을 고려하세요.
<code class="language-csharp">void Foo(int[] data) { data[0] = 1; // 更改数组内容,在调用代码中可见 } void Bar(int[] data) { data = new int[20]; // 重新分配数组,在调用代码中不可见 }</code>
참조 전달을 사용하여 성능 최적화
어떤 경우에는 배열이나 목록을 참조로 전달하면 프로그램 성능이 향상될 수 있습니다. 이는 전체 데이터 구조를 복사하는 것을 방지하기 때문입니다. 이는 대규모 데이터 세트의 경우 비용이 매우 많이 들 수 있습니다.
참조로 배열이나 목록을 전달하려면 함수 매개변수를 선언할 때 "ref" 수정자를 사용할 수 있습니다. 이 수정자는 참조 자체가 해당 값뿐만 아니라 참조로 전달됨을 명시적으로 나타냅니다.
예
<code class="language-csharp">void Baz(ref int[] data) { data[0] = 1; // 更改数组内容,在调用代码中可见 data = new int[20]; // 重新分配数组,在调用代码中可见 }</code>
"ref" 수정자를 사용하면 "Baz" 함수의 배열 내용 변경 및 재할당이 호출 코드에 표시됩니다. 메서드나 함수에서 참조 자체를 수정할 필요가 없는 경우 코드 혼란을 초래할 수 있으므로 일반적으로 "ref" 수정자를 사용하지 않는 것이 좋습니다.
위 내용은 C#에서 배열과 목록은 참조로 전달되나요, 아니면 값으로 전달되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!