Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pertimbangan penting dengan konversi jenis adalah apakah hasil konversi berada dalam rentang jenis data tujuan.
Konversi pelebaran mengubah nilai menjadi jenis data yang dapat menampung nilai apa pun dari data asli. Melebarkan konversi mempertahankan nilai sumber tetapi dapat mengubah representasinya. Ini terjadi jika Anda mengonversi dari jenis integral ke Decimal, atau dari Char ke String.
Konversi yang dipersempit mengubah nilai menjadi jenis data yang mungkin tidak dapat menyimpan beberapa nilai yang mungkin. Misalnya, nilai pecahan dibulatkan ketika dikonversi ke jenis integral, dan jenis numerik yang dikonversi menjadi Boolean dikurangi menjadi True atau False.
Melebarkan Konversi
Tabel berikut menunjukkan konversi pelebaran standar.
| Jenis data | Melebar ke tipe data 1 |
|---|---|
| SByte |
SByte, , ShortInteger, Long, Decimal, , Single,Double |
| Byte |
Byte, , ShortUShort, Integer, UInteger, Long, ULong, Decimal, , Single,Double |
| Pendek |
Short, , IntegerLong, Decimal, , Single,Double |
| UShort |
UShort, , IntegerUInteger, Long, ULong, Decimal, , Single,Double |
| Bilangan Bulat |
Integer, LongDecimal, Single, Double2 |
| UInteger |
UInteger, , LongULong, Decimal, Single, Double2 |
| Panjang |
Long, , DecimalSingle, Double2 |
| ULong |
ULong, , DecimalSingle, Double2 |
| Desimal |
Decimal, , SingleDouble2 |
| Tunggal |
Single, Double |
| Ganda | Double |
| Jenis enumerasi apa pun (Enum) | Jenis integral yang mendasar dan jenis apa pun yang merupakan perluasan dari jenis yang mendasar tersebut. |
| Char |
Char, String |
Char Array |
Char Array String |
| Tipe apa saja | Objek |
| Jenis turunan manapun | Setiap jenis dasar dari mana ia berasal 3. |
| Tipe apa saja | Antarmuka apa pun yang diimplementasikannya. |
| Tidak apa-apa | Jenis data atau jenis objek apa pun. |
1 Menurut definisi, setiap jenis data melebar ke dirinya sendiri.
2 Konversi dari Integer, , UIntegerLong, ULong, atau Decimal ke Single atau Double dapat mengakibatkan hilangnya presisi, tetapi tidak pernah kehilangan besaran. Dalam hal ini mereka tidak menimbulkan kehilangan informasi.
3 Mungkin tampak mengejutkan bahwa konversi dari jenis turunan ke salah satu jenis dasarnya melebar. Pembenarannya adalah bahwa jenis turunan berisi semua anggota jenis dasar, sehingga memenuhi syarat sebagai instans jenis dasar. Dalam arah yang berlawanan, jenis dasar tidak berisi anggota baru yang ditentukan oleh jenis turunan.
Konversi yang diperluas selalu berhasil saat waktu proses dan tidak pernah menimbulkan kehilangan data. Anda selalu dapat melakukannya secara implisit, entah Option Strict Statement mengatur saklar pemeriksaan tipe ke On atau ke Off.
Konversi yang Menyempit
Konversi penyempitan standar meliputi yang berikut ini:
Arah kebalikan dari konversi yang diperluas dalam tabel sebelumnya (kecuali bahwa setiap jenis melebar ke dirinya sendiri)
Konversi dalam kedua arah antara Boolean dan jenis numerik apa pun
Konversi dari jenis numerik apa pun ke jenis enumerasi apa pun (
Enum)Konversi dalam kedua arah antara String dan jenis numerik apa pun,
Boolean, atau TanggalKonversi dari jenis data atau jenis objek ke jenis yang berasal darinya
Konversi yang mempersempit tidak selalu berhasil pada waktu proses, dan dapat gagal atau menimbulkan kehilangan data. Kesalahan terjadi jika tipe data tujuan tidak dapat menerima nilai yang dikonversi. Misalnya, konversi numerik dapat mengakibatkan kelebihan. Pengkompilasi tidak memungkinkan Anda untuk melakukan konversi penyempitan secara implisit kecuali Pernyataan Ketat Opsi mengatur sakelar pemeriksaan jenis ke Off.
Nota
Kesalahan konversi yang mempersempit ditekan untuk konversi dari elemen dalam koleksi For Each…Next ke variabel kontrol perulangan. Untuk informasi dan contoh selengkapnya, lihat bagian "Mempersempit Konversi" di Untuk Setiap... Pernyataan Berikutnya.
Kapan Menggunakan Konversi Yang Mempersempit
Anda menggunakan konversi yang mempersempit saat Anda mengetahui nilai sumber dapat dikonversi ke jenis data tujuan tanpa kesalahan atau kehilangan data. Misalnya, jika Anda memiliki String yang Anda tahu berisi "True" atau "False," Anda dapat menggunakan CBool kata kunci untuk mengonversinya ke Boolean.
Pengecualian Selama Konversi
Karena konversi yang melebar selalu berhasil, mereka tidak melemparkan pengecualian. Konversi penyempitan, ketika gagal, paling umum menghasilkan pengecualian berikut:
InvalidCastException — jika tidak ada konversi yang didefinisikan di antara kedua jenis
OverflowException — (hanya jenis integral) jika nilai yang dikonversi terlalu besar untuk jenis target
Jika sebuah kelas atau struktur mendefinisikan Fungsi CType untuk berfungsi sebagai operator konversi ke atau dari kelas atau struktur tersebut, CType dapat melemparkan pengecualian apa pun yang dianggap sesuai. Selain itu, yang CType mungkin memanggil fungsi Visual Basic atau metode .NET Framework, yang pada gilirannya dapat melemparkan berbagai pengecualian.
Perubahan Selama Konversi Tipe Referensi
Konversi dari jenis referensi hanya menyalin penunjuk ke nilai. Nilai itu sendiri tidak disalin atau diubah dengan cara apa pun. Satu-satunya hal yang dapat berubah adalah jenis data variabel yang memegang pointer. Dalam contoh berikut, jenis data dikonversi dari kelas turunan ke kelas dasarnya, tetapi objek yang sekarang ditunjukkan oleh kedua variabel tidak berubah.
' 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