동일한 두 형식 간에 표준 변환이 존재하지 않는 경우 사용자 정의 형식은 사용자 지정 암시적 또는 명시적 변환을 다른 형식으로 정의할 수 있습니다. 암시적 변환은 특별한 구문을 호출할 필요가 없으며 할당 및 메서드 호출과 같은 다양한 상황에서 발생할 수 있습니다. 미리 정의된 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
}
}
확인된 명시적 변환 연산자를 정의할 수 있습니다. 자세한 내용은 산술 연산자 문서의 사용자 정의 검사 연산자 섹션을 참조하세요.
또한 키워드를 operator 사용하여 미리 정의된 C# 연산자를 오버로드합니다. 자세한 내용은 연산자 오버로드를 참조하세요.
C# 언어 사양
자세한 내용은 C# 언어 사양의 다음 섹션을 참조하세요.
참고하십시오
.NET