> 백엔드 개발 > C++ > C#에서 배열과 목록은 참조로 전달되나요, 아니면 값으로 전달되나요?

C#에서 배열과 목록은 참조로 전달되나요, 아니면 값으로 전달되나요?

DDD
풀어 주다: 2025-01-10 10:56:42
원래의
528명이 탐색했습니다.

How Are Arrays and Lists Passed in C#: By Reference or By Value?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿