Konversi Implisit dan Eksplisit (Visual Basic)

Sebuah konversi implisit tidak memerlukan sintaks khusus dalam kode sumber. Dalam contoh berikut, Visual Basic secara implisit mengonversi nilai k menjadi nilai floating-point presisi tunggal sebelum menetapkannya ke 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

Konversi eksplisit menggunakan kata kunci konversi jenis. Visual Basic menyediakan beberapa kata kunci tersebut, yang memaksa ekspresi dalam tanda kurung ke jenis data yang diinginkan. Kata kunci ini bertindak seperti fungsi, tetapi pengompilasi menghasilkan kode sebaris, sehingga eksekusi sedikit lebih cepat daripada dengan pemanggilan fungsi.

Dalam ekstensi contoh sebelumnya berikut, kata kunci CInt mengonversi nilai q kembali ke bilangan bulat sebelum menetapkannya ke 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).

Kata Kunci Konversi

Tabel berikut menunjukkan kata kunci konversi yang tersedia.

Ketik kata kunci konversi Mengonversi ekspresi menjadi jenis data Jenis ekspresi data yang diizinkan untuk dikonversi
CBool Jenis Data Boolean Jenis numerik apa pun (termasuk Byte, SByte, dan tipe terbilang), String, Object
CByte Jenis Data Byte Jenis numerik apa pun (termasuk SByte dan tipe terbilang), Boolean, String, Object
CChar Jenis Data Karakter String, Object
CDate Jenis Data Tanggal String, Object
CDbl Jenis Data Ganda Semua jenis numerik (termasuk Byte, SByte, dan tipe terbilang), Boolean, String, Object
CDec Jenis Data Desimal Semua jenis numerik (termasuk Byte, SByte, dan tipe terbilang), Boolean, String, Object
CInt Jenis Data Bilangan Bulat Semua jenis numerik (termasuk Byte, SByte, dan tipe terbilang), Boolean, String, Object
CLng Jenis Data Panjang Semua jenis numerik (termasuk Byte, SByte, dan tipe terbilang), Boolean, String, Object
CObj Jenis Data Objek Jenis apa pun
CSByte Jenis Data SByte Jenis numerik apa pun (termasuk Byte dan tipe terbilang), Boolean, String, Object
CShort Jenis Data Pendek Semua jenis numerik (termasuk Byte, SByte, dan tipe terbilang), Boolean, String, Object
CSng Jenis Data Tunggal Semua jenis numerik (termasuk Byte, SByte, dan tipe terbilang), Boolean, String, Object
CStr Jenis Data String Jenis numerik apa pun (termasuk Byte, SByte, dan tipe terbilang), Boolean, Char, larikChar, Date, Object
CType Jenis yang ditentukan setelah koma (,) Saat mengonversi ke jenis data elementary (termasuk larik dari jenis elementary), jenis yang sama seperti yang diizinkan untuk kata kunci konversi yang sesuai

Saat mengonversi ke jenis data komposit, antarmuka yang diterapkannya dan kelas tempatnya mewarisi

Saat mengonversi ke kelas atau struktur tempat Anda kelebihan beban CType, kelas atau struktur tersebut
CUInt Jenis Data UInteger Semua jenis numerik (termasuk Byte, SByte, dan tipe terbilang), Boolean, String, Object
CULng Jenis Data ULong Semua jenis numerik (termasuk Byte, SByte, dan tipe terbilang), Boolean, String, Object
CUShort Jenis Data UShort Semua jenis numerik (termasuk Byte, SByte, dan tipe terbilang), Boolean, String, Object

Fungsi CType

Fungsi CType beroperasi pada dua argumen. Yang pertama adalah ekspresi yang akan dikonversi, dan yang kedua adalah jenis data tujuan atau kelas objek. Perhatikan bahwa argumen pertama harus berupa ekspresi, bukan jenis.

CType adalah fungsi sebaris, yang berarti kode yang dikompilasi membuat konversi, sering kali tanpa menghasilkan panggilan fungsi. Ini meningkatkan performa.

Untuk perbandingan CType dengan kata kunci konversi jenis lainnya, lihat Operator DirectCast dan Operator TryCast.

Jenis Elementary

Contoh berikut menunjukkan penggunaan CType.

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

Jenis Komposit

Anda dapat menggunakan CType untuk mengonversi nilai ke jenis data komposit serta ke jenis dasar. Anda juga dapat menggunakannya untuk memaksa kelas objek ke jenis salah satu antarmukanya, seperti dalam contoh berikut.

' 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)

Jenis Larik

CType juga dapat mengonversi jenis data larik, seperti pada contoh berikut.

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

Untuk informasi selengkapnya dan contohnya, lihat Konversi Larik.

Jenis Yang Menentukan CType

Anda dapat menentukan CType pada kelas atau struktur yang telah Anda tentukan. Ini memungkinkan Anda untuk mengonversi nilai ke dan dari jenis kelas atau struktur Anda. Untuk informasi selengkapnya dan contohnya, lihat Cara: Menentukan Operator Konversi.

Catatan

Nilai yang digunakan dengan kata kunci konversi harus valid untuk jenis data tujuan, atau terjadi kesalahan. Misalnya, jika Anda mencoba mengonversi Long menjadi Integer, nilai Long harus berada dalam rentang yang valid untuk jenis data Integer.

Perhatian

Menentukan CType untuk mengonversi dari satu jenis kelas ke jenis lain gagal pada durasi jika jenis sumber tidak berasal dari jenis tujuan. Kegagalan seperti itu melemparkan pengecualian InvalidCastException.

Namun, jika salah satu jenisnya adalah struktur atau kelas yang telah Anda tetapkan, dan jika Anda telah menetapkan CType pada struktur atau kelas tersebut, konversi dapat berhasil jika memenuhi persyaratan CType Anda. Lihat Cara: Menentukan Operator Konversi.

Melakukan konversi eksplisit juga dikenal sebagai transmisi ekspresi ke jenis data atau kelas objek tertentu.

Lihat juga