Unboxing 변환(C# 프로그래밍 가이드)
unboxing은 object 형식에서 값 형식으로, 또는 인터페이스 형식에서 해당 인터페이스를 구현하는 값 형식으로의 명시적 변환입니다. unboxing 연산 과정은 다음과 같습니다.
개체 인스턴스가 지정한 값 형식을 boxing한 값인지 확인합니다.
인스턴스의 값을 값 형식 변수에 복사합니다.
다음 문은 boxing 및 unboxing 연산을 모두 보여 줍니다.
int i = 123; // a value type
object o = i; // boxing
int j = (int)o; // unboxing
다음 그림에서는 이전 문의 결과를 보여 줍니다.
Unboxing 변환
런타임에 값 형식의 unboxing이 성공하려면 unboxing되는 항목은 이전에 해당 값 형식의 인스턴스를 boxing하여 생성된 개체에 대한 참조여야 합니다. 호환되지 않는 값 형식에 대한 참조나 null을 unboxing하려고 하면 InvalidCastException이 발생합니다.
Description
다음 예제에서는 잘못된 unboxing의 경우와 그 결과로 발생하는 InvalidCastException을 보여 줍니다. 이 예제에서는 try 및 catch를 사용하여 오류가 발생할 때 오류 메시지를 표시합니다.
예제
class TestUnboxing
{
static void Main()
{
int i = 123;
object o = i; // implicit boxing
try
{
int j = (short)o; // attempt to unbox
System.Console.WriteLine("Unboxing OK.");
}
catch (System.InvalidCastException e)
{
System.Console.WriteLine("{0} Error: Incorrect unboxing.", e.Message);
}
}
}
출력
Specified cast is not valid. Error: Incorrect unboxing.
다음 문을
int j = (short) o;
아래와 같이 변경하면
int j = (int) o;
변환이 수행되고 결과가 출력됩니다.
Unboxing OK.