Section 37.3: 변환 연산자 (Conversion Operator)
C# 에서는, 각 타입들은 사용자 정의 변환 연산자 (custom Conversion Operator) 를 명시할 수 있으며, 이는 명시적 혹은 묵시적 타입 변환을 통해 값을 다른 타입과 상호 변환을 시킬 수 있다. 예를 들어, JavaScript 표현식 하나를 나타내는 아래와 같은 클래스가 있다고 가정해 보자:
public class JsExpression {
private readonly string expression;
public JsExpression(string rawExpression) {
this.expression = rawExpression;
}
public override string ToString() {
return this.expression;
}
public JsExpression IsEqualTo(JsExpression other) {
return new JsExpression("(" + this + " == " + other + ")");
}
}
만약 두개의 JavaScript 값 비교를 나타내는 새로운 JsExpression
객체를 생성하고자 한다면, 아래와 같은 코드를 작성할 수 있을 것이다:
JsExpression intExpression = new JsExpression("-1");
JsExpression doubleExpression = new JsExpression("-1.0");
Console.WriteLine(intExpression.IsEqualTo(doubleExpression)); // (-1 == -1.0)
만약 JsExpression
클래스에 명시적 변환 연산자를 (explicit conversion operator) 추가해 준다면, 해당 명시적 변환을 통해 더욱 간단한 타입 변환을 수행할 수 있을 것이다.
public static explicit operator JsExpression(int value)
{
return new JsExpression(value.ToString());
}
public static explicit operator JsExpression(double value)
{
return new JsExpression(value.ToString());
}
// 사용 예제:
JsExpression intExpression = (JsExpression)(-1);
JsExpression doubleExpression = (JsExpression)(-1.0);
Console.WriteLine(intExpression.IsEqualTo(doubleExpression)); // (-1 == -1.0)
아니면, 이 연산자들을 암묵적 (implicit) 연산자로 변경함으로써 더욱 손쉬운 문법을 제공할수도 있을 것이다.
public static implicit operator JsExpression(int value)
{
return new JsExpression(value.ToString());
}
public static implicit operator JsExpression(double value)
{
return new JsExpression(value.ToString());
}
// 사용 예제:
JsExpression intExpression = -1;
Console.WriteLine(intExpression.IsEqualTo(-1.0)); // (-1 == -1.0)
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.
[출처] https://books.goalkicker.com/CSharpBook/
반응형
'번역 > C# Notes for Professionals' 카테고리의 다른 글
37.5: 명시적 타입 변환 (Explicit Casting) (0) | 2022.01.12 |
---|---|
37.4: LINQ 타입 변환 (Casting) 연산들 (0) | 2022.01.11 |
37.2: 다중 상속된 객체를 원하는 기본 (base) 타입으로 캐스팅하기 (0) | 2021.12.13 |
37.1: 타입 변환 (casting) 없이 타입 호환성 여부 확인하기 (0) | 2021.12.09 |
36.2: MSDN 의 묵시적 (implicit) 연산자 예제 (0) | 2021.12.09 |