대입 연산자(C# 참조)

대입 연산자 =은 오른쪽 피연산자의 을 왼쪽 피연산자가 제공하는 변수, 속성 또는 인덱서 요소에 할당합니다. 대입식의 결과는 왼쪽 피연산자에 할당된 값입니다. 오른쪽 피연산자의 형식은 왼쪽 피연산자의 형식과 동일하거나 왼쪽 피연산자의 형식으로 암시적으로 변환할 수 있어야 합니다.

= 대입 연산자는 오른쪽 결합성입니다. 즉, 다음 형식의 식을 가정해 보세요.

a = b = c

이 식은 다음과 같이 계산됩니다.

a = (b = c)

다음 예제에서는 로컬 변수, 속성 및 인덱서 요소를 왼쪽 피연산자로 포함해서 대입 연산자를 사용하는 방법을 보여 줍니다.

List<double> numbers = [1.0, 2.0, 3.0];

Console.WriteLine(numbers.Capacity);
numbers.Capacity = 100;
Console.WriteLine(numbers.Capacity);
// Output:
// 4
// 100

int newFirstElement;
double originalFirstElement = numbers[0];
newFirstElement = 5;
numbers[0] = newFirstElement;
Console.WriteLine(originalFirstElement);
Console.WriteLine(numbers[0]);
// Output:
// 1
// 5

할당의 왼쪽 피연산자는 오른쪽 피연산자의 을 받습니다. 피연산자가 값 형식인 경우 할당은 오른쪽 피연산자의 콘텐츠를 복사합니다. 피연산자가 참조 형식인 경우 할당은 개체에 대한 참조를 복사합니다.

이를 값 할당이라고 합니다. 즉, 값이 할당됩니다.

ref 할당

Ref 할당= ref은 다음 예에서 볼 수 있듯이 왼쪽 피연산자를 오른쪽 피연산자의 별칭으로 만듭니다.

void Display(double[] s) => Console.WriteLine(string.Join(" ", s));

double[] arr = { 0.0, 0.0, 0.0 };
Display(arr);

ref double arrayElement = ref arr[0];
arrayElement = 3.0;
Display(arr);

arrayElement = ref arr[arr.Length - 1];
arrayElement = 5.0;
Display(arr);
// Output:
// 0 0 0
// 3 0 0
// 3 0 5

앞의 예에서 로컬 참조 변수arrayElement는 첫 번째 배열 요소에 대한 별칭으로 초기화되었습니다. 그런 다음 마지막 배열 요소를 참조하도록 ref가 다시 할당됩니다. 별칭이므로 일반 대입 연산자 =을 사용하여 해당 값을 업데이트하면 해당 배열 요소도 업데이트됩니다.

ref 할당의 왼쪽 피연산자는 로컬 참조 변수, ref 필드ref, out 또는 in 메서드 매개 변수일 수 있습니다. 두 피연산자는 모두 동일한 형식이어야 합니다.

복합 할당

이진 연산자(op)의 경우 양식의 복합 할당 식

x op= y

위의 식은 아래의 식과 동일합니다.

x = x op y

단, x가 한 번만 계산됩니다.

복합 할당은 산술, 부울 논리, 비트 논리 및 시프트 연산자를 통해 지원됩니다.

null 병합 할당

왼쪽 피연산자가 null로 평가되는 경우에만 null 병합 대입 연산자 ??=을 사용하여 오른쪽 피연산자의 값을 왼쪽 피연산자에 할당할 수 있습니다. 자세한 내용은 ?? 및 ??= 연산자 문서를 참조하세요.

연산자 오버로드 가능성

사용자 정의 형식은 대입 연산자를 오버로드할 수 없습니다. 그러나 사용자 정의 형식은 다른 형식으로 암시적 변환을 정의할 수 있습니다. 이렇게 하면 사용자 정의 형식의 값을 다른 형식의 변수, 속성 또는 인덱서 요소에 할당할 수 있습니다. 자세한 내용은 사용자 정의 변환 연산자를 참조하세요.

사용자 정의 형식은 복합 대입 연산자를 명시적으로 오버로드할 수 없습니다. 그러나 사용자 정의 형식이 이항 연산자 op를 오버로드하는 경우에는 op= 연산자(있는 경우)도 암시적으로 오버로드됩니다.

C# 언어 사양

자세한 내용은 C# 언어 사양대입 연산자 섹션을 참조하세요.

참고 항목