Bagikan melalui


Memperlebar dan Mempersempit Konversi (Visual Basic)

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 Tanggal

  • Konversi 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  

Lihat juga