참고 사이트 : https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/operators/operator-overloading
사용자 정의 형식이 미리 정의된 C# 연산자 (+, -, *, /, ...)의 동작을 직접 지정할 수 있는 기능이다.
분수의 덧셈같은 것을 구현할 때 사용한다.
operator를 사용해서 연산자를 선언한다.
public으로 선언해야 한다.
static 한정자가 필요하다.
단항 연산자, 이항 연산자의 하나 이상의 매개변수는 형식 T 또는 T?여야 한다.
C# 14부터 복합 할당 연산자(+=, -=) 및 인스턴스 ++/-- 연산자도 오버로드가 가능하다.
| 종류 | 예시 | 비고 |
|---|---|---|
| 단항 연산자 | +x, -x, !x, ~x, ++, -- | ++/--는 C# 14부터 인스턴스 방식 가능하다. |
| 이항 연산자 | x + y, x - y, x * y, x / y, x % y | |
| 비교/같음 | ==, !=, <, >, <=, >= | ==/!=, <,> 및 <=,>=는 쌍으로 오버로드해야 한다 |
| 비트/시프트 | &, |, ^, <<, >>, >>> | |
| 복합 할당 | +=, -=, *=, /= 등 | C# 14 이상에서만 오버로드 가능, 반환형은 void이어야 한다. |
public struct Fraction
{
private int numerator;
private int denominator;
public Fraction(int numerator, int denominator)
{
if(denominator == 0)
{
throw new ArgumentException("분모는 0이 될 수 없다.", nameof(denominator));
}
this.numerator = numerator;
this.denominator = denominator;
}
public static Fraction operator +(Fraction operand) => operand;
public static Fraction operator -(Fraction operand) => new Fraction(-operand.numerator, operand.denominator);
public static Fraction operator +(Fraction left, Fraction right)
=> new Fraction(left.numerator * right.denominator + right.numerator * left.denominator, left.denominator * right.denominator );
}
public static class OperatorOverloading
{
public static void Main()
{
Fraction a = new Fraction(2, 3);
Fraction b = new Fraction(1, 3);
Console.WriteLine(a+b); // output : 9 / 9;
}
}