암시적 변환과 명시적 변환(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
값을 정수로 변환한 후 다시 정수로 k
변환 q
합니다.
' 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 |
날짜 데이터 형식 | String , Object |
CDbl |
Double 데이터 형식 | 모든 숫자 형식(, 및 SByte 열거형 형식 포함Byte ), , String Boolean Object |
CDec |
Decimal 데이터 형식 | 모든 숫자 형식(, 및 SByte 열거형 형식 포함Byte ), , String Boolean Object |
CInt |
정수 데이터 형식 | 모든 숫자 형식(, 및 SByte 열거형 형식 포함Byte ), , String Boolean Object |
CLng |
Long 데이터 형식 | 모든 숫자 형식(, 및 SByte 열거형 형식 포함Byte ), , String Boolean Object |
CObj |
Object Data Type | 모든 형식 |
CSByte |
SByte 데이터 형식 | 모든 숫자 형식(열거 형식 포함Byte ), Boolean , String Object |
CShort |
Short 데이터 형식 | 모든 숫자 형식(, 및 SByte 열거형 형식 포함Byte ), , String Boolean Object |
CSng |
Single 데이터 형식 | 모든 숫자 형식(, 및 SByte 열거형 형식 포함Byte ), , String Boolean Object |
CStr |
문자열 데이터 형식 | 모든 숫자 형식(예: Byte , SByte 및 열거 형식), Boolean , 배열Char Char , Date Object |
CType |
쉼표 뒤에 지정된 형식(, ) |
기본 데이터 형식(기본 형식의 배열 포함)으로 변환할 때 해당 변환 키워드에 허용되는 형식과 동일한 형식 복합 데이터 형식으로 변환할 때 구현하는 인터페이스 및 상속되는 클래스 오버로드한 클래스 또는 구조체, 해당 클래스 또는 구조체로 CType 변환하는 경우 |
CUInt |
UInteger 데이터 형식 | 모든 숫자 형식(, 및 SByte 열거형 형식 포함Byte ), , String Boolean Object |
CULng |
ULong 데이터 형식 | 모든 숫자 형식(, 및 SByte 열거형 형식 포함Byte ), , String Boolean Object |
CUShort |
UShort 데이터 형식 | 모든 숫자 형식(, 및 SByte 열거형 형식 포함Byte ), , String Boolean 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
할 수 있습니다. 이렇게 하면 클래스 또는 구조체의 형식에서 값을 변환할 수 있습니다. 자세한 내용과 예제는 방법: 변환 연산자 정의를 참조하세요.
참고
변환 키워드와 함께 사용되는 값은 대상 데이터 형식에 유효해야 합니다. 그렇지 않으면 오류가 발생합니다. 예를 들어 변환을 Long
Integer
시도하는 경우 해당 값은 데이터 형식의 Long
유효한 범위 Integer
내에 있어야 합니다.
주의
원본 형식이 CType
대상 형식에서 파생되지 않는 경우 런타임에 한 클래스 형식에서 다른 클래스 형식으로 변환하도록 지정하면 실패합니다. 이러한 오류는 예외를 InvalidCastException throw합니다.
그러나 형식 중 하나가 정의한 구조체 또는 클래스이고 해당 구조체 또는 클래스에 대해 정의 CType
한 경우 변환이 사용자의 CType
요구 사항을 충족하는 경우 성공할 수 있습니다. 방법: 변환 연산자 정의
명시적 변환을 수행하는 것은 식을 지정된 데이터 형식 또는 개체 클래스로 캐스팅 하는 것이라고도 합니다.