대입 연산자 =
은 오른쪽 피연산자의 값을 왼쪽 피연산자가 제공하는 변수, 속성 또는 인덱서 요소에 할당합니다. 대입식의 결과는 왼쪽 피연산자에 할당된 값입니다. 오른쪽 피연산자의 형식은 왼쪽 피연산자의 형식과 동일하거나 왼쪽 피연산자의 형식으로 암시적으로 변환할 수 있어야 합니다.
=
대입 연산자는 오른쪽에서부터 결합됩니다. 즉, 다음 형식의 식이 있습니다.
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
할당의 왼쪽 피연산자는 오른쪽 피연산자의 값을 받습니다. 피연산자가 값 형식인 경우 할당은 오른쪽 피연산자의 콘텐츠를 복사합니다. 피연산자가 참조 형식인 경우 할당은 개체에 대한 참조를 복사합니다.
이 작업을 값 할당이라고 합니다. 값이 할당됩니다.
C# 14부터 값 할당의 왼쪽에는 null 조건부 멤버 식(예: ?.
또는 ?[]
)이 포함될 수 있습니다. 왼쪽 표현식이 null이면 오른쪽 표현식이 평가되지 않습니다.
참조 할당
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
메서드 매개 변수일 수 있습니다. 두 피연산자는 모두 동일한 형식이어야 합니다.
할당은 ref
참조 변수에 다른 참조가 있음을 의미합니다. 더 이상 이전 참조 대상과 관련이 없습니다. 매개 변수에서 사용 ref =
한다는 ref
것은 매개 변수가 더 이상 해당 인수를 참조하지 않음을 의미합니다. 참조를 재할당한 후 개체의 상태를 수정하는 모든 작업은 새 항목에 해당 수정 사항을 적용합니다. 예를 들어 다음 방법을 고려합니다.
private static void RefReassignAndModify(scoped ref string s)
{
string sLocal = "Hello";
Console.WriteLine(sLocal); // Output: Hello
s = ref sLocal;
s = "World";
Console.WriteLine(s); // Output: World
다음은 문자열이 수정되기 전에 s
이 s
를 참조하도록 ref
다시 할당되었기 때문에 메서드 호출 후 매개 변수 sLocal
의 할당이 표시되지 않는다는 것을 보여줍니다.
string msg = "Hi";
RefReassignAndModify(ref msg);
Console.WriteLine(msg); // Output: Hi!
복합 할당
이진 연산자 op
에 대한 복합 할당 식
x op= y
에 해당합니다.
x = x op y
단, x
한 번만 평가됩니다.
산술, 부울 논리 및 비트 논리 및 시프트 연산자는 모두 복합 할당을 지원합니다.
null 병합 할당
왼쪽 피연산자가 ??=
로 평가되는 경우에만 null 병합 대입 연산자 null
을 사용하여 오른쪽 피연산자의 값을 왼쪽 피연산자에 할당할 수 있습니다. 자세한 내용은 및 ??
연산자??=
문서를 참조하세요.
연산자 오버로드 가능성
사용자 정의 형식은 대입 연산자를 오버로드할 수 없습니다. 그러나 사용자 정의 형식은 다른 형식으로 암시적 변환을 정의할 수 있습니다. 이렇게 하면 사용자 정의 형식의 값을 다른 형식의 변수, 속성 또는 인덱서 요소에 할당할 수 있습니다. 자세한 내용은 사용자 정의 변환 연산자를 참조하세요.
사용자 정의 형식이 이진 연산자를 오버로드하는 경우 연산 op
op=
자(있는 경우)도 암시적으로 오버로드됩니다. C# 14부터 사용자 정의 형식은 보다 효율적인 구현을 제공하기 위해 복합 할당 연산자(op=
)를 명시적으로 오버로드할 수 있습니다. 일반적으로 이진 작업의 결과를 유지하기 위해 새 인스턴스를 할당하는 대신 값을 현재 위치에서 업데이트할 수 있으므로 형식이 이러한 연산자를 오버로드합니다. 형식이 명시적 오버로드를 제공하지 않으면 컴파일러는 암시적 오버로드를 생성합니다.
C# 언어 사양
자세한 내용은 C# 언어 사양의 대입 연산자 섹션 및 사용자 정의 복합 할당 기능 사양을 참조하세요.
관련 항목 보기
.NET