오버로드할 수 있는 연산자(C# 프로그래밍 가이드)

C#에서는 사용자 정의 형식에서 operator 키워드로 정적 멤버 함수를 정의하여 연산자를 오버로드할 수 있습니다. 그러나 다음 표에서 볼 수 있는 것처럼 모든 연산자를 오버로드할 수 있는 것은 아니며 일부 제한이 있는 연산자도 있습니다.

연산자

오버로드 가능성

+, -, !, ~, ++, --, true, false

이 단항 연산자는 오버로드할 수 있습니다.

+, -, *, /, %, &, |, ^, <<, >>

이 이항 연산자는 오버로드할 수 있습니다.

==, !=, <, >, <=, >=

비교 연산자는 오버로드할 수 있습니다. 단, 이 표의 아래에 있는 참고 사항을 참조하십시오.

&&, ||

조건 논리 연산자는 오버로드할 수 없지만, 오버로드 가능한 & 및 |를 사용하여 계산할 수 있습니다.

[]

배열 인덱싱 연산자는 오버로드할 수 없지만 인덱서를 정의할 수 있습니다.

()

캐스트 연산자는 오버로드할 수 없지만 새로운 변환 연산자를 정의할 수 있습니다(explicitimplicit 참조).

+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=

할당 연산자는 오버로드할 수 없지만 다른 방법으로 계산할 수 있습니다. 예를 들어, += 연산자는 오버로드할 수 있는 + 연산자를 사용하여 계산할 수 있습니다.

=, ., ?:, ->, new, is, sizeof, typeof

이 연산자는 오버로드할 수 없습니다.

참고

비교 연산자를 오버로드하는 경우에는 쌍으로 오버로드해야 합니다. 즉, == 연산자를 오버로드하려면 != 연산자도 오버로드해야 합니다. 반대의 경우에도 마찬가지이며 < 및 > 연산자, <= 및 >= 연산자의 경우에도 동일한 규칙이 적용됩니다.

사용자 지정 클래스에 대한 연산자를 오버로드하려면 올바른 시그니처를 사용하여 클래스의 메서드를 만들어야 합니다. 이 메서드의 이름은 "operator X"여야 합니다. 여기서 X는 오버로드하려는 연산자의 이름이나 기호입니다. 단항 연산자에는 매개 변수가 하나이고, 이항 연산자에는 매개 변수가 두 개입니다. 각각의 경우에 매개 변수 중 하나는 연산자를 선언하는 클래스나 구조체와 동일한 형식이어야 합니다. 예를 들면 다음과 같습니다.

public static Complex operator +(Complex c1, Complex c2)

자세한 내용은 방법: 연산자 오버로딩을 사용하여 복소수 클래스 만들기(C# 프로그래밍 가이드)를 참조하십시오.

참고 항목

참조

문, 식, 연산자(C# 프로그래밍 가이드)

연산자(C# 프로그래밍 가이드)

C# 연산자

개념

C# 프로그래밍 가이드

기타 리소스

Why are overloaded operators always static in C#?