728x90
C#에서는 연산자를 개발자 임의로 오버로드해서 사용할 수 있도록 되어 있습니다.
특정한 클래스의 값에 대해 연산을 적용할 경우 조건부로 값을 걸어서 원하는 값이 나오도록 설정할 수 있습니다.
+, -, >, <, != 등의 연산자를 특정한 이유로 조건부에 따라 값을 변경해야 할 때 다음과 같이 사용할 수 있습니다.
각 연산자 별로 파라미터에 (OperaterOvl op, DataType parameter), (DataType parameter, OperaterOvl op)을 좌우 둘다 구현한 이유는 다음과 같은 경우에도 값을 동일하게 처리하기 위함 입니다.
OperaterOvl op = new OperaterOvl();
int plus = op + 100;
// + 연산자에 대해 좌우 케이스를 둘다 적용하지 않을 경우
// plus2값을 구하는 상황에서 컴파일 에러 발생
int plus2 = 100 + op;
연산자 오버로드 클래스
public class OperaterOvl
{
private string _opVal = "METHOD";
private int _opNum = 500;
// + 연산자를 사용할 때 100이 넘어가는 수를 더하면 0으로 만들어버리자
// Ex) op._opNum + 3
public static int operator +(OperaterOvl op, int num)
{
if (num > 100)
num = 0;
return op._opNum + num;
}
// + 연산자를 사용할 때 100이 넘어가는 수를 더하면 0으로 만들어버리자
// Ex) 3 + op._opNum
public static int operator +(int num, OperaterOvl op)
{
if (num > 100)
num = 0;
return op._opNum + num;
}
// - 연산자를 사용할 때 100이 넘어가는 수를 빼면 100을 빼주자
// Ex) op._opNum - 3
public static int operator -(OperaterOvl op, int num)
{
if (num > 100)
num -= 100;
return op._opNum - num;
}
// - 연산자를 사용할 때 100이 넘어가는 수를 빼면 100을 빼주자
// Ex) 3 - op._opNum
public static int operator -(int num, OperaterOvl op)
{
if (num > 100)
num -= 100;
return op._opNum - num;
}
// 이하의 연산자는 +, -를 사용한 방법과 마찬가지로 원하는 조건을 넣어서 사용가능합니다
public static bool operator ==(OperaterOvl op, string txt)
{
return op._opVal == txt;
}
public static bool operator ==(string txt, OperaterOvl op)
{
return txt == op._opVal;
}
public static bool operator !=(OperaterOvl op, string txt)
{
return op._opVal == txt;
}
public static bool operator !=(string txt, OperaterOvl op)
{
return txt != op._opVal;
}
public static bool operator >(OperaterOvl op, int num)
{
return op._opNum > num;
}
public static bool operator >=(OperaterOvl op, int num)
{
return op._opNum > num;
}
public static bool operator <=(OperaterOvl op, int num)
{
return num != op._opNum;
}
public static bool operator <(OperaterOvl op, int num)
{
return num != op._opNum;
}
// ==, !=를 오버로드 하기때문에 Equals함수도 같이 구현합시다
// 하지 않을 경우 클래스에 경고줄 발생
public override bool Equals(object obj)
{
return base.Equals(obj);
}
// 아래의 함수를 구현하지 않을경우 경고줄이 생기기 때문에 구현하도록 합시다
public override int GetHashCode()
{
return base.GetHashCode();
}
}
실제 사용 예시
OperaterOvl op = new OperaterOvl();
// 결과값 : 500
int plus = op + 200;
// 결과값 : 500
int plus2 = 200 + op;
// 결과값 : 400
int minus = op - 200;
// 결과값 : 150
int minus2 = 200 - 50;
// 결과값 : true
bool okay = op == "METHOD";
bool okay2 = "METHOD" == op;
// 결과값 : false
bool not_okay = op == "CLASS";
bool not_okay2 = "CLASS" == op;
728x90
'C#' 카테고리의 다른 글
C# - 확장메소드 사용법 및 예시 (0) | 2021.07.15 |
---|---|
C# - List 기본함수 사용법(Add, AddRange, Contains, Clear, IndexOf, Remove, RemoveAll, Reverse, ToArray, Sort) (0) | 2021.07.14 |
C# - Get Set의 사용법, 의미 (0) | 2021.07.12 |
C# - Xml파일 제어, Xml파싱 (0) | 2021.07.08 |
C# - 문자와 문자열의 차이(string과 char) (0) | 2021.07.06 |
댓글