[C#] 연산자 오버로딩 (+ implicit, explicit)

Date:     Updated:

카테고리:

태그:

🚀 C# 도 연산자 오버로딩이 된다.

public class Cents
{
    private int m_cents;
    public Cents(int cents = 0) { this.m_cents = cents; }

    public static int operator +(Cents c1, Cents c2)
    {
        return c1.m_cents + c2.m_cents;
    }
}

class HelloWorld
{
    static void Main()
    {
        Cents cents1 = new Cents(5);
        Cents cents2 = new Cents(7);

        int result = cents1 + cents2; // + 연산자 오버로딩 호출
    }
}

연산자 오버로딩 조건

  1. public 이어야 한다.
  2. static 이어야 한다.
  3. 리턴 타입은 자유다.
    • 그러나 void는 안되는 것 같다. (void 로 해보려 했는데 “사용자 정의 연산자는 void 를 반환할 수 없다”는 컴파일 에러 메세지가 출력됐다.)


🚀 형변환 연산자

C# 은 암시적 형변환, 명시적 형변환 조차도 오버로딩이 가능하다.

✈ explicit

public class Cents
{
    private int m_cents;
    public Cents(int cents = 0) { this.m_cents = cents; }

    public static explicit operator bool(Cents c)
    {
        if (c.m_cents > 0) return true;
        else return false;
    }
}

class HelloWorld
{
    static void Main()
    {
        Cents cents1 = new Cents(5);

        if ((bool)cents1)
            Console.WriteLine("explicit casting");
    }
}
💎출력💎

explicit casting

Cents 타입의 객체가 if ((bool)cents1) 로 이렇게 명시적으로 형변환 될 떄 호출되는 오버로딩.


✈ implicit

public class Cents
{
    private int m_cents;
    public Cents(int cents = 0) { this.m_cents = cents; }

    public static implicit operator bool(Cents c)
    {
        if (c.m_cents > 0) return true;
        else return false;
    }
}

class HelloWorld
{
    static void Main()
    {
        Cents cents1 = new Cents(5);

        if (cents1)
            Console.WriteLine("implicit casting");
    }
}
💎출력💎

implicit casting

Cents 타입의 객체가 if (cents1)로 이렇게 암묵적으로 형변환 될 떄 호출되는 오버로딩.



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

C Sharp 카테고리 내 다른 글 보러가기

댓글 남기기