암시적 변환과 명시적 변환(Visual Basic)

암시적 변환에는 소스 코드에 특별한 구문이 필요 없습니다. 다음 예시에서, Visual Basic은 k 값을 q에 할당하기 전에 암시적으로 단정밀도 부동 소수점 값으로 변환합니다.

Dim k As Integer
Dim q As Double
' Integer widens to Double, so you can do this with Option Strict On.
k = 432
q = k

명시적 변환은 형식 변환 키워드를 사용합니다. Visual Basic은 이러한 키워드를 몇 가지 제공하는데, 이러한 키워드들은 괄호 안의 식을 원하는 데이터 형식으로 강제변환합니다. 이러한 키워드들은 함수처럼 작동하지만 컴파일러는 코드를 인라인으로 생성하기 때문에 함수 호출에 비해서는 약간 빠르게 실행됩니다.

앞의 예시에 대한 다음의 확장에서 CInt 키워드는 q 값을 k에 할당하기 전에 다시 정수로 변환합니다.

' q had been assigned the value 432 from k.
q = Math.Sqrt(q)
k = CInt(q)
' k now has the value 21 (rounded square root of 432).

변환 키워드

다음 표에는 사용할 수 있는 변환 키워드가 나와 있습니다.

형식 변환 키워드 식을 데이터 형식으로 변환합니다. 변환할 식에 허용되는 데이터 형식
CBool Boolean 데이터 형식 모든 숫자 형식(Byte, SByte, 열거형을 포함), String, Object
CByte Byte 데이터 형식 모든 숫자 형식(SByte 및 열거형 포함), Boolean, String, Object
CChar Char 데이터 형식 String, Object
CDate Date 데이터 형식 String, Object
CDbl Double 데이터 형식 모든 숫자 형식(Byte, SByte, 열거형을 포함), Boolean, String, Object
CDec Decimal 데이터 형식 모든 숫자 형식(Byte, SByte, 열거형을 포함), Boolean, String, Object
CInt Integer 데이터 형식 모든 숫자 형식(Byte, SByte, 열거형을 포함), Boolean, String, Object
CLng Long 데이터 형식 모든 숫자 형식(Byte, SByte, 열거형을 포함), Boolean, String, Object
CObj Object Data Type 모든 형식
CSByte SByte 데이터 형식 모든 숫자 형식(Byte 및 열거형 포함), Boolean, String, Object
CShort Short 데이터 형식 모든 숫자 형식(Byte, SByte, 열거형을 포함), Boolean, String, Object
CSng Single 데이터 형식 모든 숫자 형식(Byte, SByte, 열거형을 포함), Boolean, String, Object
CStr String 데이터 형식 모든 숫자 형식(Byte, SByte, 열거형을 포함), Boolean, Char, Char 배열, Date, Object
CType 쉼표 다음에 지정된 형식(,) 기본 형식 배열을 비롯한 기본 데이터 형식으로 변환 시, 해당하는 변환 키워드에서 허용하는 것과 동일한 형식

복합 데이터 형식으로 변환 시, 구현되는 인터페이스 및 상속하는 클래스

오버로드한 CType의 클래스나 구조체로 변환 시, 해당 클래스나 구조체
CUInt UInteger 데이터 형식 모든 숫자 형식(Byte, SByte, 열거형을 포함), Boolean, String, Object
CULng ULong 데이터 형식 모든 숫자 형식(Byte, SByte, 열거형을 포함), Boolean, String, Object
CUShort UShort 데이터 형식 모든 숫자 형식(Byte, SByte, 열거형을 포함), Boolean, String, Object

CType 함수

CType 함수는 두 인수에 작동합니다. 첫 번째는 변환할 식이며 두 번째는 대상 데이터 형식 또는 개체 클래스입니다. 첫 번째 인수는 형식이 아니라 식이어야 한다는 점에 주의해야 합니다.

CType인라인 함수이고, 이는 컴파일된 코드가 변환을 일으키는데, 함수 호출을 발생시키지 않는 상태로 변환을 일으키는 경우가 많다는 의미입니다. 이렇게 하면 성능을 향상 시킬 수 있습니다.

CType을 다른 형식 변환 키워드와 비교하려면 DirectCast 연산자TryCast 연산자를 참조하세요.

기본 형식

다음 예에서는 CType의 사용법을 보여줍니다.

k = CType(q, Integer)
' The following statement coerces w to the specific object class Label.
f = CType(w, Label)

복합 형식

값을 복합 데이터 형식으로 변환하는 경우나 기본 형식으로 변환하는 경우에 CType을 사용할 수 있습니다. 다음 예시에서와 같이 개체 클래스를 그 인터페이스 중 하나의 형식으로 강제 변환하는 데 사용할 수도 있습니다.

' Assume class cZone implements interface iZone.
Dim h As Object
' The first argument to CType must be an expression, not a type.
Dim cZ As cZone
' The following statement coerces a cZone object to its interface iZone.
h = CType(cZ, iZone)

배열 형식

다음 예시에서와 같이 CType은 배열 데이터 형식을 변환할 수도 있습니다.

Dim v() As classV
Dim obArray() As Object
' Assume some object array has been assigned to obArray.
' Check for run-time type compatibility.
If TypeOf obArray Is classV()
    ' obArray can be converted to classV.
    v = CType(obArray, classV())
End If

자세한 내용과 예시는 배열 변환을 참조하세요.

CType을 정의하는 형식

CType은 정의한 클래스나 구조체에서 정의할 수 있습니다. 이를 통해 값을 클래스나 구조체 형식으로 변환하거나 이를 역순으로 변환하는 것도 가능합니다. 자세한 내용과 예시는 방법: 변환 연산자 정의하기를 참조하세요.

참고 항목

변환 키워드를 통해 사용된 값은 대상 데이터 형식에 대해 유효해야 하며, 그렇지 않은 경우 오류가 발생합니다. 예를 들어 LongInteger로 변환하려는 경우, Long의 값은 Integer 데이터 형식의 유효 범위 내에 있어야 합니다.

주의

원본 형식이 대상 형식에서 유래한 것이 아닌 경우, 어떤 클래스 형식을 다른 클래스 형식으로 변환하기 위해 CType을 지정하면 런타임 시에 실패합니다. 이러한 실패는 InvalidCastException 예외를 throw합니다.

하지만 형식 중 하나가 사용자가 정의한 구조체이거나 클래스이며 해당 구조체 또는 클래스에 CType을 정의한 경우라면, 그 내용이 CType의 요구 사항을 만족하면 성공적으로 변환할 수 있습니다. 방법: 변환 연산자 정의하기를 참조하세요.

명시적 변환의 수행은 지정된 데이터 형식이나 개체 클래스에 식을 캐스팅하는 것으로도 알려져 있습니다.

참고 항목