반응형
사용자 정의 명시적, 암시적 변환 연산자
- 명시적 변환 연산자 : explicit operator
- 암시적 변환 연산자 : implicit operator
public static implicit operator byte(Digit d) => d.digit;
public static explicit operator Digit(byte b) => new Digit(b);
(C++에는 explicit 키워드가 있는데 해당 키워드를 생성자에 추가하면 암시적인 형변환을 제한한다. 오직 명시적 형변환 만을 허용)
예제 코드
using System;
public readonly struct Digit
{
private readonly byte digit;
public Digit(byte digit)
{
if (digit > 9)
{
throw new ArgumentOutOfRangeException(nameof(digit), "Digit cannot be greater than nine.");
}
this.digit = digit;
}
public static implicit operator byte(Digit d) => d.digit;
public static explicit operator Digit(byte b) => new Digit(b);
public override string ToString() => $"{digit}";
}
public static class UserDefinedConversions
{
public static void Main()
{
var d = new Digit(7);
byte number = d;
Console.WriteLine(number); // output: 7
Digit digit = (Digit)number;
Console.WriteLine(digit); // output: 7
}
}
참조 사이트
'프로그래밍 > C#' 카테고리의 다른 글
C# IEnumerable, IEnumerator에 대해서 (2) | 2023.10.05 |
---|---|
C# 정수 숫자 형식 (2) | 2023.09.26 |
C# Substring 복습하기 (0) | 2023.09.20 |
C# Math.Sqrt(Double) vs Math.Pow(Double, Double) (8) | 2023.08.28 |
Environment.TickCount (2) | 2023.08.24 |
댓글