사용자 정의 명시적 및 암시적 변환 연산자
사용자 정의 형식은 다른 형식에서 또는 다른 형식으로 사용자 지정 암시적 또는 명시적 변환을 정의할 수 있습니다. 암시적 변환에는 특수 구문을 호출할 필요가 없으며 할당 및 메서드 호출과 같은 다양한 상황에서 발생할 수 있습니다. 미리 정의된 C# 암시적 변환은 항상 성공하며 예외를 throw하지 않습니다. 사용자 정의 암시적 변화도 이러한 방식으로 작동해야 합니다. 사용자 지정 변환이 예외를 throw하거나 정보가 손실될 수 있는 경우 이를 명시적 변환으로 정의합니다.
사용자 정의 변환은 is 및 as 연산자에서 고려되지 않습니다. 캐스트 식을 사용하여 사용자 정의 명시적 변환을 호출합니다.
operator
및 implicit
또는 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# 11부터는 선택된 명시적 변환 연산자를 정의할 수 있습니다. 자세한 내용은 산술 연산자 문서의 사용자 정의 검사 연산자 섹션을 참조하세요.
또한 operator
키워드를 사용하여 미리 정의된 C# 연산자를 오버로드합니다. 자세한 내용은 연산자 오버로드를 참조하세요.
C# 언어 사양
자세한 내용은 C# 언어 사양의 다음 섹션을 참조하세요.
참고 항목
- C# 연산자 및 식
- 연산자 오버로드
- 형식 테스트 및 캐스트 연산자
- 캐스팅 및 형식 변환
- 디자인 지침 - 변환 연산자
- Chained user-defined explicit conversions in C#(C#의 연결된 사용자 정의 명시적 변환)
.NET