다음을 통해 공유


확대 및 축소 변환(Visual Basic)

형식 변환의 중요한 고려 사항은 변환 결과가 대상 데이터 형식의 범위 내에 있는지 여부입니다.

확대 변환은 원래 데이터의 가능한 값을 허용할 수 있는 데이터 형식으로 값을 변경합니다. 확대 변환은 원본 값을 유지하지만 표현을 변경할 수 있습니다. 정수 형식에서 Decimal로 변환하거나 Char에서 String로 변환할 때 발생합니다.

축소 변환은 가능한 값 중 일부를 보유하지 못할 수 있는 데이터 형식으로 값을 변경합니다. 예를 들어 소수 자릿수 값은 정수 형식으로 변환될 때 반올림되고 변환 Boolean 되는 숫자 형식은 둘 중 하나 True 또는 False으로 줄어듭니다.

확대 변환

다음 표에서는 표준 확대 변환을 보여 줍니다.

데이터 형식 데이터 형식 으로 확장 1
SByte SByte, Short, Integer, Long, Decimal, SingleDouble
바이트 Byte, Short, UShort, Integer, UInteger, Long, ULongDecimal, SingleDouble
짧은 Short, Integer, Long, Decimal, SingleDouble
UShort UShort, Integer, UInteger, Long, ULong, Decimal, SingleDouble
정수 Integer,Long, Decimal, SingleDouble2
UInteger UInteger,Long, ULong, Decimal, SingleDouble2
오래 Long, Decimal, SingleDouble2
ULong ULong, Decimal, SingleDouble2
10진수 Decimal Single, Double2
싱글 Single, Double
이중 Double
열거형 유형(Enum) 기본 정수 계열 형식과 기본 형식이 확장되는 모든 형식입니다.
Char(문자) Char, String
Char 배열 Char 배열 String
모든 형식 객체
모든 파생 형식 파생된 모든 기본 형식은 3입니다.
모든 형식 그것이 구현하는 모든 인터페이스.
모든 데이터 형식 또는 개체 형식입니다.

1 정의에 따라 모든 데이터 형식이 그 자체로 확장됩니다.

2Integer, UInteger, Long, ULong, 또는 Decimal에서 Single 또는 Double로의 변환은 정밀도가 손실될 수 있지만 절대 크기 손실은 없습니다. 이러한 의미에서 그들은 정보 손실을 발생하지 않습니다.

3 파생 형식에서 기본 형식 중 하나로의 변환이 확대되는 것은 놀라운 일이 될 수 있습니다. 파생 형식은 기본 형식의 모든 멤버를 포함하므로 기본 형식의 인스턴스로 간주됩니다. 반대 방향으로 기본 형식에는 파생 형식으로 정의된 새 멤버가 포함되지 않습니다.

확대 변환은 항상 런타임에 성공하며 데이터 손실이 발생하지 않습니다. Option Strict 문에서 형식 검사 스위치를 On 또는 Off로 설정하더라도 항상 이를 암시적으로 수행할 수 있습니다.

축소 변환

표준 축소 변환에는 다음이 포함됩니다.

  • 앞의 표에 있는 확대 변환의 역방향(모든 형식이 자기 자신으로 확장되는 경우는 제외하고)

  • 부울과 모든 숫자 형식 간의 양방향 변환

  • 모든 숫자 형식에서 열거형 형식으로 변환(Enum)

  • 문자열과 숫자 형식 Boolean또는 날짜 사이의 어느 방향으로든 변환

  • 데이터 형식 또는 개체 형식에서 파생된 형식으로 변환

축소 변환은 런타임에 항상 성공하지는 못하며 데이터 손실이 발생하거나 실패할 수 있습니다. 대상 데이터 형식이 변환되는 값을 받을 수 없는 경우 오류가 발생합니다. 예를 들어 숫자 변환으로 인해 오버플로가 발생할 수 있습니다. 형식 검사 스위치를 설정하는 Option Strict 문이 없으면 컴파일러는 암시적으로 축소 변환을 수행할 수 없습니다.

비고

컬렉션의 요소 For Each…Next 에서 루프 컨트롤 변수로 변환하는 경우 축소 변환 오류가 표시되지 않습니다. 자세한 내용 및 예제는 For Each...의 "축소 변환" 섹션을 참조하세요. 다음 문입니다.

축소 변환을 사용하는 경우

원본 값을 오류 또는 데이터 손실 없이 대상 데이터 형식으로 변환할 수 있는 경우 축소 변환을 사용합니다. 예를 들어, "True" 또는 "False"가 포함된 것으로 알고 있는 String의 경우, CBool 키워드를 사용하여 Boolean로 변환할 수 있습니다.

변환 중 예외

확대 변환은 항상 성공하기 때문에 예외를 발생시키지 않습니다. 축소 변환이 실패하면 가장 일반적으로 다음 예외를 발생시킵니다.

  • InvalidCastException - 두 형식 간에 변환이 정의되지 않은 경우

  • OverflowException — 변환된 값이 대상 형식에 비해 너무 큰 경우(정수 형식에만 해당)

클래스 또는 구조체가 변환 연산자로 사용하기 위해 CType 함수를 정의하는 경우, 해당 클래스 또는 구조체는 적절하다고 판단한 예외를 CType로 던질 수 있습니다. 또한 CType이(가) Visual Basic 함수나 .NET Framework 메서드를 호출하여 다양한 예외를 발생시킬 수 있습니다.

참조 형식 변환 중 변경 내용

참조 형식에서 변환하면 값에 대한 포인터만 복사됩니다. 값 자체는 어떤 방식으로도 복사되거나 변경되지 않습니다. 변경할 수 있는 유일한 것은 포인터를 보유하는 변수의 데이터 형식입니다. 다음 예제에서 데이터 형식은 파생 클래스에서 기본 클래스로 변환되지만 두 변수가 가리키는 개체는 변경되지 않습니다.

' Assume class cSquare inherits from class cShape.  
Dim shape As cShape  
Dim square As cSquare = New cSquare  
' The following statement performs a widening  
' conversion from a derived class to its base class.  
shape = square  

참고하십시오