[C#] 연산자 오버로딩 (+ implicit, explicit)
카테고리: C Sharp
태그: C Sharp Programming
🚀 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; // + 연산자 오버로딩 호출
}
}
연산자 오버로딩 조건
public
이어야 한다.static
이어야 한다.- 리턴 타입은 자유다.
- 그러나
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)로 이렇게 암묵적으로 형변환 될 떄 호출되는 오버로딩.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기