오버로드할 수 있는 연산자(C# 프로그래밍 가이드)
C#에서는 사용자 정의 형식에서 operator 키워드로 정적 멤버 함수를 정의하여 연산자를 오버로드할 수 있습니다. 그러나 다음 표에서 볼 수 있는 것처럼 모든 연산자를 오버로드할 수 있는 것은 아니며 일부 제한이 있는 연산자도 있습니다.
연산자 |
오버로드 가능성 |
---|---|
이 단항 연산자는 오버로드할 수 있습니다. |
|
이 이항 연산자는 오버로드할 수 있습니다. |
|
비교 연산자는 오버로드할 수 있습니다. 단, 이 표의 아래에 있는 참고 사항을 참조하십시오. |
|
조건 논리 연산자는 오버로드할 수 없지만, 오버로드 가능한 & 및 |를 사용하여 계산할 수 있습니다. |
|
배열 인덱싱 연산자는 오버로드할 수 없지만 인덱서를 정의할 수 있습니다. |
|
캐스트 연산자는 오버로드할 수 없지만 새로운 변환 연산자를 정의할 수 있습니다(explicit 및 implicit 참조). |
|
할당 연산자는 오버로드할 수 없지만 다른 방법으로 계산할 수 있습니다. 예를 들어, += 연산자는 오버로드할 수 있는 + 연산자를 사용하여 계산할 수 있습니다. |
|
이 연산자는 오버로드할 수 없습니다. |
참고
비교 연산자를 오버로드하는 경우에는 쌍으로 오버로드해야 합니다. 즉, == 연산자를 오버로드하려면 != 연산자도 오버로드해야 합니다. 반대의 경우에도 마찬가지이며 < 및 > 연산자, <= 및 >= 연산자의 경우에도 동일한 규칙이 적용됩니다.
사용자 지정 클래스에 대한 연산자를 오버로드하려면 올바른 시그니처를 사용하여 클래스의 메서드를 만들어야 합니다. 이 메서드의 이름은 "operator X"여야 합니다. 여기서 X는 오버로드하려는 연산자의 이름이나 기호입니다. 단항 연산자에는 매개 변수가 하나이고, 이항 연산자에는 매개 변수가 두 개입니다. 각각의 경우에 매개 변수 중 하나는 연산자를 선언하는 클래스나 구조체와 동일한 형식이어야 합니다. 예를 들면 다음과 같습니다.
public static Complex operator +(Complex c1, Complex c2)
자세한 내용은 방법: 연산자 오버로딩을 사용하여 복소수 클래스 만들기(C# 프로그래밍 가이드)를 참조하십시오.