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 Stringdö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 TrueFalsedeğ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, , UShortShort, , 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, Double2
Uınteger UInteger, Long, ULong, Decimal, Single, Double2
Uzun Long, Decimal, Single, Double2
Ulong ULong, Decimal, Single, Double2
Ondalık Decimal, Single, Double2
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, ULongveya DecimalSingleDouble veya dönüştürmeleri Integerduyarlı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 Offolarak 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:

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ı Offolarak 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  

Ayrıca bkz.