Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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ı türünden Decimal'a veya Char türünden String'ye dönüştürdüğünüzde 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, Boolean türüne dönüştürülen bir sayısal değer, True veya False değerine sadeleştirilir.
Genişletme Dönüştürmeleri
Aşağıdaki tabloda standart genişletme dönüştürmeleri gösterilmektedir.
| Veri türü | Veri türlerini 1 olarak genişletir |
|---|---|
| SByte |
SByte, Short, Integer, , Long, Decimal, Single, Double |
| Bayt |
Byte, , ShortUShort, , 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 |
| UInteger |
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. |
| Hiç | Herhangi bir veri türü veya nesne türü. |
1 Tanım gereği, her veri türü kendi kendine genişler.
2Integer, UInteger, Long, ULong veya Decimal'den Single veya Double'ye yapılan dönüşümler 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 yapılan dönüşümün genişleyen bir dönüşüm olması şaşırtıcı olabilir. 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 daraltıcı dönüştürmeler şunları içerir:
Önceki tablodaki genişletme dönüştürmelerinin ters yönleri (her türün kendi kendine genişlemesi dışında)
Boolean ile herhangi bir sayısal veri türü arasında her 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
Daraltıcı dönüştürmeler çalışma zamanında her zaman başarılı olmayabilir ve 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 aşırı yüklenmeyle sonuçlanabilir. Derleyici, daraltma dönüştürmelerini örtük olarak gerçekleştirmenize izin vermez, Seçenek Katı Deyimi tür denetimi anahtarını Off olarak ayarladıkça.
Uyarı
Bir koleksiyondaki For Each…Next öğelerden döngü kontrol değişkenine yapılan dönüşümlerde, daraltıcı dönüşüm hatası baskılanıyor. Daha fazla bilgi ve örnek için "Daraltıcı Dönüştürmeler" bölümüne For Each...Next Deyimi bölümünde bakın.
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, CBool anahtar sözcüğünü kullanarak onu Boolean öğesine dönüştürebilirsiniz.
Dönüştürme SırasındaKi Özel Durumlar
Genişletme dönüştürmeleri her zaman başarılı olduğundan, istisnalar oluşturmaz. Daraltıcı dönüşümler başarısız olduğunda, en yaygın olarak aşağıdaki özel durumları fırlatır:
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, bu da çeşitli özel durumlar ortaya çıkarabilir.
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 değere işaretçiyi 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