Genişletme ve Daraltma Dönüşümleri (Visual Basic)
Tür dönüştürme ile ilgili önemli bir nokta, dönüştürme sonucunun hedef veri türü aralığında olup olmadığıdır.
Genişletme dönüştürmesi , bir değeri, özgün verilerin olası değerlerine izin verebilen bir veri türüne dönüştürür. Genişletme dönüştürmeleri kaynak değeri korur ancak gösterimini değiştirebilir. Bu durum, bir tamsayıyı türünden Decimal
öğesine veya türünden Char
öğesine String
dönüştürürseniz oluşur.
Daraltma dönüştürmesi , bir değeri, olası değerlerden bazılarını tutamayacak bir veri türüne dönüştürür. Örneğin, kesirli bir değer tam sayı türüne dönüştürüldüğünde yuvarlanırken, dönüştürülen Boolean
sayısal bir tür veya True
False
değerine küçültülür.
Dönüştürmeleri Genişletme
Aşağıdaki tabloda standart genişletme dönüştürmeleri gösterilmektedir.
Veri türü | Veri türlerine genişleterek 1 |
---|---|
Sbyte | SByte , Short , Integer , , Long , Decimal , Single , Double |
Bayt | Byte , , UShort Short , , Integer , UInteger , Long , ULong , Decimal , Single ,Double |
Kısa | Short , Integer , Long , , Decimal , Single , Double |
Ushort | UShort , Integer , UInteger , , Long , ULong , Decimal , Single , Double |
Tamsayı | Integer , Long , Decimal , Single , Double 2 |
Uınteger | UInteger , Long , ULong , Decimal , Single , Double 2 |
Uzun | Long , Decimal , Single , Double 2 |
Ulong | ULong , Decimal , Single , Double 2 |
Ondalık | Decimal , Single , Double 2 |
Tek | Single , Double |
Çift | Double |
Numaralandırılmış herhangi bir tür (Enum) | Temel alınan tam sayı türü ve temel alınan türün genişlediği herhangi bir tür. |
Char | Char , String |
Char Dizi |
Char Dizi String |
Herhangi bir tür | Nesne |
Türetilmiş herhangi bir tür | Türetildiği herhangi bir temel tür 3. |
Herhangi bir tür | Uyguladığı tüm arabirimler. |
Nothing | Herhangi bir veri türü veya nesne türü. |
1 Tanım gereği, her veri türü kendi kendine genişler.
2 , , UInteger
, Long
, ULong
veya Decimal
Single
Double
veya dönüştürmeleri Integer
duyarlık kaybına neden olabilir, ancak hiçbir zaman büyüklük kaybına neden olmaz. Bu anlamda bilgi kaybına neden olmazlar.
3 Türetilmiş bir türden temel türlerinden birine dönüştürmenin genişletilmesi şaşırtıcı görünebilir. Gerekçe, türetilmiş türün temel türün tüm üyelerini içermesidir, bu nedenle temel türün bir örneği olarak niteler. Ters yönde, temel türü türetilen tür tarafından tanımlanan herhangi bir yeni üye içermez.
Genişletme dönüştürmeleri her zaman çalışma zamanında başarılı olur ve hiçbir zaman veri kaybına neden olmaz. Option Strict Deyimi'nin tür denetimi anahtarını On
veya Off
olarak ayarlayıp belirlemediğini, bunları her zaman örtük olarak gerçekleştirebilirsiniz.
Dönüştürmeleri Daraltma
Standart daraltma dönüştürmeleri şunları içerir:
Önceki tablodaki genişletme dönüştürmelerinin ters yönleri (her türün kendi kendine genişlemesi dışında)
Boole ile herhangi bir sayısal tür arasında iki yönde dönüştürmeler
Herhangi bir sayısal türden herhangi bir numaralandırılmış türe (
Enum
) dönüştürmelerDize ile herhangi bir sayısal tür,
Boolean
, veya Tarih arasında iki yönde dönüştürmelerVeri türünden veya nesne türünden türetilmiş bir türe dönüştürmeler
Daraltma dönüştürmeleri çalışma zamanında her zaman başarılı olmaz ve başarısız olabilir veya veri kaybına neden olabilir. Hedef veri türü dönüştürülen değeri alamıyorsa bir hata oluşur. Örneğin, sayısal dönüştürme taşmayla sonuçlanabilir. Seçenek Katı Deyimi tür denetimi anahtarını Off
olarak ayarlamıyorsa derleyici, daraltma dönüştürmelerini örtük olarak gerçekleştirmenize izin vermez.
Not
Bir koleksiyondaki For Each…Next
öğelerden döngü denetimi değişkenine dönüştürmeler için daraltma-dönüştürme hatası gizleniyor. Daha fazla bilgi ve örnek için, Her İçin... bölümündeki "Dönüştürmeleri Daraltma" bölümüne bakın. Next Deyimi.
Daraltma Dönüştürmeleri Ne Zaman Kullanılır?
Kaynak değerin hata veya veri kaybı olmadan hedef veri türüne dönüştürülebileceğini bildiğinizde bir daraltma dönüştürmesi kullanırsınız. Örneğin, "True" veya "False" içerdiğini bildiğiniz bir String
dosyanız varsa, anahtar sözcüğünü CBool
kullanarak öğesine dönüştürebilirsiniz Boolean
.
Dönüştürme SırasındaKi Özel Durumlar
Genişletme dönüştürmeleri her zaman başarılı olduğundan, özel durumlar oluşturmaz. Dönüştürmeleri daraltma, başarısız olduğunda en yaygın olarak aşağıdaki özel durumları oluşturur:
InvalidCastException — iki tür arasında dönüştürme tanımlanmadıysa
OverflowException — (yalnızca tam sayı türleri) dönüştürülen değer hedef tür için çok büyükse
Bir sınıf veya yapı, bu sınıfa veya yapıya dönüştürme işleci işlevi görecek bir CType İşlevi tanımlarsa, uygun CType
gördüğü herhangi bir özel durum oluşturabilir. Buna ek olarak, Visual CType
Basic işlevlerini veya .NET Framework yöntemlerini çağırabilir ve bu da çeşitli özel durumlar ortaya çıkabilir.
Başvuru Türü Dönüştürmeleri SırasındaKi Değişiklikler
Başvuru türünden dönüştürme yalnızca işaretçiyi değere kopyalar. Değerin kendisi hiçbir şekilde kopyalanır veya değiştirilmez. Değiştirebilecek tek şey, işaretçiyi tutan değişkenin veri türüdür. Aşağıdaki örnekte, veri türü türetilmiş sınıftan temel sınıfına dönüştürülür, ancak her iki değişkenin de işaret ettiği nesne değişmemiştir.
' 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