변환 연산자 사용(C# 프로그래밍 가이드)
변환 연산자는 explicit 또는 implicit 연산자일 수 있습니다. 사용하기에는 암시적 변환 연산자가 더 쉽지만, 연산자의 사용자에게 변환 수행 사실을 알리려는 경우에는 명시적 연산자가 유용합니다. 이 항목에서는 두 형식을 모두 보여 줍니다.
예제
다음 코드는 명시적 변환 연산자의 예입니다. 이 연산자는 Byte 형식을 Digit라는 값 형식으로 변환합니다. 모든 바이트를 숫자로 변환할 수 있는 것은 아니므로 이 변환은 명시적입니다. 즉, Main 메서드에서와 같이 캐스트를 사용해야 합니다.
struct Digit
{
byte value;
public Digit(byte value) //constructor
{
if (value > 9)
{
throw new System.ArgumentException();
}
this.value = value;
}
public static explicit operator Digit(byte b) // explicit byte to digit conversion operator
{
Digit d = new Digit(b); // explicit conversion
System.Console.WriteLine("Conversion occurred.");
return d;
}
}
class TestExplicitConversion
{
static void Main()
{
try
{
byte b = 3;
Digit d = (Digit)b; // explicit conversion
}
catch (System.Exception e)
{
System.Console.WriteLine("{0} Exception caught.", e);
}
}
}
// Output: Conversion occurred.
이 예제에서는 암시적 변환 연산자를 보여 줍니다. 이를 위해 이전 예제에서 수행한 작업을 실행 취소하는 변환 연산자를 정의합니다. 이 예제에서는 Digit이라는 값 클래스를 정수 계열 Byte 형식으로 변환합니다. 모든 숫자를 Byte로 변환할 수 있으므로 사용자에게 변환 사실을 명시적으로 알릴 필요가 없습니다.
struct Digit
{
byte value;
public Digit(byte value) //constructor
{
if (value > 9)
{
throw new System.ArgumentException();
}
this.value = value;
}
public static implicit operator byte(Digit d) // implicit digit to byte conversion operator
{
System.Console.WriteLine("conversion occurred");
return d.value; // implicit conversion
}
}
class TestImplicitConversion
{
static void Main()
{
Digit d = new Digit(3);
byte b = d; // implicit conversion -- no cast needed
}
}
// Output: Conversion occurred.