Konversi Pelebaran dan Penyempitan (Visual Basic)

Pertimbangan penting dalam konversi jenis adalah apakah hasil konversi berada dalam rentang jenis data tujuan.

Konversi pelebaran mengubah nilai menjadi jenis data yang dapat memungkinkan nilai yang mungkin dari data asli. Konversi pelebaran mempertahankan nilai sumber tetapi dapat mengubah representasinya. Hal ini terjadi jika Anda mengonversi dari jenis integral ke Decimal, atau dari Char ke String.

Konversi penyempitan mengubah nilai menjadi jenis data yang mungkin tidak dapat menahan beberapa nilai. Misalnya, nilai pecahan dibulatkan ketika dikonversi ke jenis integral, dan jenis numerik yang dikonversi menjadi Boolean dikurangi menjadi True atau False.

Konversi Pelebaran

Tabel berikut menunjukkan konversi pelebaran standar.

Jenis Data Melebar ke jenis 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, , UIntegerInteger, Long, ULong, Decimal, , Single,Double
Bilangan bulat Integer, Long, Decimal, Single, Double2
UInteger UInteger, Long, ULong, Decimal, Single, Double2
Long Long, Decimal, Single, Double2
ULong ULong, Decimal, Single, Double2
Desimal Decimal, Single, Double2
Satu Single, Double
Laju Double
Tipe terbilang apa pun (Enum) Jenis integral yang mendasari dan jenis apa pun yang jenisnya dasarnya melebar.
Char Char, String
Char array Char array, String
Jenis apa pun Objek
Jenis turunan apa pun Jenis dasar apa pun dari mana turunan berasal 3.
Jenis apa pun Antarmuka apa pun yang diimplementasikan.
Tidak ada Jenis data atau jenis objek apa pun.

1 Menurut definisi, setiap jenis data melebar ke data itu sendiri.

2 Konversi dari Integer, UInteger, Long, ULong, atau Decimal menjadi Single atau Double dapat mengakibatkan hilangnya presisi, tetapi tidak pernah kehilangan magnitudo. Dalam mempertimbangkan hal ini, mereka tidak menimbulkan kehilangan informasi.

3 Mungkin tampak mengejutkan bahwa konversi dari jenis turunan ke salah satu jenis dasarnya melebar. Justifikasinya adalah bahwa jenis turunan tersebut berisi semua anggota jenis dasar, sehingga memenuhi syarat sebagai instans jenis dasar. Sebaliknya, jenis dasar tidak berisi anggota baru yang ditentukan oleh jenis turunan.

Konversi pelebaran selalu berhasil pada durasi dan tidak pernah menimbulkan kehilangan data. Anda selalu dapat melakukannya secara implisit, apakah Pernyataan Ketat Opsi mengatur peralihan pemeriksaan jenis ke On atau ke Off.

Mempersempit Konversi

Konversi penyempitan standar meliputi konversi berikut:

  • Arah sebaliknya dari konversi pelebaran dalam tabel sebelumnya (kecuali bahwa setiap jenis melebar ke jenis itu sendiri)

  • Konversi di kedua arah antara Boolean dan jenis numerik apa pun

  • Konversi dari jenis numerik apa pun ke tipe terbilang apa pun (Enum)

  • Konversi di kedua arah antara String and jenis numerik apa pun, Boolean, atau Tanggal

  • Konversi dari jenis data atau jenis objek ke jenis yang merupakan turunan dari jenis tersebut

Konversi penyempitan tidak selalu berhasil pada durasi, dan bisa gagal atau menimbulkan kehilangan data. Kesalahan terjadi jika jenis data tujuan tidak dapat menerima nilai yang dikonversi. Misalnya, konversi numerik dapat mengakibatkan luapan. Pengompilasi tidak mengizinkan Anda untuk melakukan konversi penyempitan secara implisit kecuali Pernyataan Ketat Opsi mengatur sakelar pemeriksaan jenis ke Off.

Catatan

Kesalahan mempersempit konversi ditekan untuk konversi dari elemen dalam koleksi For Each…Next ke variabel kontrol perulangan. Untuk informasi dan contoh selengkapnya, lihat bagian "Konversi Penyempitan" di Untuk Setiap...Pernyataan Selanjutnya.

Kapan Konversi Penyempitan Digunakan

Konversi penyempitan digunakan saat Anda mengetahui nilai sumber dapat dikonversi ke jenis data tujuan tanpa kesalahan atau kehilangan data. Misalnya, jika Anda memiliki String yang diketahui berisi "True" atau "False," Anda dapat menggunakan kata kunci CBool untuk mengonversinya ke Boolean.

Pengecualian Selama Konversi

Karena konversi pelebaran selalu berhasil, mereka tidak membuat pengecualian. Ketika gagal, konversi penyempitan paling sering membuat pengecualian berikut:

  • InvalidCastException — jika tidak ada konversi yang didefinisikan di antara dua jenis

  • OverflowException — (hanya jenis integral) jika nilai yang dikonversi terlalu besar untuk jenis target

Jika kelas atau struktur mendefinisikan Fungsi CType untuk berfungsi sebagai operator konversi ke atau dari kelas atau struktur tersebut, CType itu dapat membuat pengecualian apa pun yang dianggap sesuai. Selain itu, CType itu mungkin memanggil fungsi Visual Basic atau metode .NET Framework, yang pada gilirannya dapat membuat berbagai pengecualian.

Perubahan Selama Konversi Jenis 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 menyimpan penunjuk. 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