대입 연산자(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# 언어 사양의 대입 연산자 섹션을 참조하세요.
참고 항목
.NET