Örtük ve Açık Dönüştürmeler (Visual Basic)
Örtük dönüştürme, kaynak kodda özel bir söz dizimi gerektirmez. Aşağıdaki örnekte Visual Basic, değerine atamadan q
önce değerini k
örtük olarak tek duyarlıklı kayan nokta değerine dönüştürür.
Dim k As Integer
Dim q As Double
' Integer widens to Double, so you can do this with Option Strict On.
k = 432
q = k
Açık dönüştürmede tür dönüştürme anahtar sözcüğü kullanılır. Visual Basic, bir ifadeyi parantez içinde istenen veri türüne zorlamak için bu tür birkaç anahtar sözcük sağlar. Bu anahtar sözcükler işlevler gibi davranır, ancak derleyici kodu satır içinde oluşturur, bu nedenle yürütme bir işlev çağrısından biraz daha hızlıdır.
Yukarıdaki örneğin aşağıdaki uzantısında anahtar sözcüğü değerini CInt
değerine atamadan önce bir tamsayıya k
dönüştürürq
.
' q had been assigned the value 432 from k.
q = Math.Sqrt(q)
k = CInt(q)
' k now has the value 21 (rounded square root of 432).
Dönüşüm Anahtar Sözcükleri
Aşağıdaki tabloda kullanılabilir dönüştürme anahtar sözcükleri gösterilmektedir.
Tür dönüştürme anahtar sözcüğü | bir ifadeyi veri türüne dönüştürür | dönüştürülecek ifadenin izin verilebilen veri türleri |
---|---|---|
CBool |
Boolean Veri Türü | Herhangi bir sayısal tür (, SByte ve numaralandırılmış türler dahilByte ), String ,Object |
CByte |
Byte Veri Türü | Herhangi bir sayısal tür (ve numaralandırılmış türler dahil SByte ), Boolean , String , Object |
CChar |
Char Veri Türü | String , Object |
CDate |
Date Veri Türü | String , Object |
CDbl |
Double Veri Türü | Herhangi bir sayısal tür (, SByte ve numaralandırılmış türler dahilByte ), Boolean , String ,Object |
CDec |
Decimal Veri Türü | Herhangi bir sayısal tür (, SByte ve numaralandırılmış türler dahilByte ), Boolean , String ,Object |
CInt |
Integer Veri Türü | Herhangi bir sayısal tür (, SByte ve numaralandırılmış türler dahilByte ), Boolean , String ,Object |
CLng |
Long Veri Türü | Herhangi bir sayısal tür (, SByte ve numaralandırılmış türler dahilByte ), Boolean , String ,Object |
CObj |
Object Veri Türü | Herhangi bir tür |
CSByte |
SByte Veri Türü | Herhangi bir sayısal tür (ve numaralandırılmış türler dahil Byte ), Boolean , String , Object |
CShort |
Short Veri Türü | Herhangi bir sayısal tür (, SByte ve numaralandırılmış türler dahilByte ), Boolean , String ,Object |
CSng |
Single Veri Türü | Herhangi bir sayısal tür (, SByte ve numaralandırılmış türler dahilByte ), Boolean , String ,Object |
CStr |
String Veri Türü | Herhangi bir sayısal tür (, SByte ve numaralandırılmış türler dahilByte ), Boolean , Char , Char dizi, Date , ,Object |
CType |
Virgülden sonra belirtilen tür (, ) |
Bir temel veri türüne (bir temel tür dizisi dahil) dönüştürürken, karşılık gelen dönüştürme anahtar sözcüğü için izin verilen türle aynı türler Bileşik veri türüne dönüştürürken, uyguladığı arabirimler ve devraldığı sınıflar aşırı yüklediğiniz CType bir sınıfa veya yapıya dönüştürürken, bu sınıf veya yapı |
CUInt |
UInteger Veri Türü | Herhangi bir sayısal tür (, SByte ve numaralandırılmış türler dahilByte ), Boolean , String ,Object |
CULng |
ULong Veri Türü | Herhangi bir sayısal tür (, SByte ve numaralandırılmış türler dahilByte ), Boolean , String ,Object |
CUShort |
UShort Veri Türü | Herhangi bir sayısal tür (, SByte ve numaralandırılmış türler dahilByte ), Boolean , String ,Object |
CType İşlevi
CType İşlevi iki bağımsız değişken üzerinde çalışır. Birincisi dönüştürülecek ifade, ikincisi hedef veri türü veya nesne sınıfıdır. İlk bağımsız değişkenin tür değil bir ifade olması gerektiğini unutmayın.
CType
satır içi bir işlevdir, yani derlenen kod genellikle işlev çağrısı oluşturmadan dönüştürmeyi yapar. Bu performansı artırır.
Diğer tür dönüştürme anahtar sözcükleriyle karşılaştırması CType
için bkz . DirectCast İşleci ve TryCast İşleci.
Temel Türler
Aşağıdaki örnekte kullanımı gösterilmektedir CType
.
k = CType(q, Integer)
' The following statement coerces w to the specific object class Label.
f = CType(w, Label)
Bileşik Türler
Değerleri bileşik veri türlerine ve temel türlere dönüştürmek için kullanabilirsiniz CType
. Aşağıdaki örnekte olduğu gibi bir nesne sınıfını arabirimlerinden birinin türüne zorlamak için de kullanabilirsiniz.
' Assume class cZone implements interface iZone.
Dim h As Object
' The first argument to CType must be an expression, not a type.
Dim cZ As cZone
' The following statement coerces a cZone object to its interface iZone.
h = CType(cZ, iZone)
Dizi Türleri
CType
aşağıdaki örnekte olduğu gibi dizi veri türlerini de dönüştürebilir.
Dim v() As classV
Dim obArray() As Object
' Assume some object array has been assigned to obArray.
' Check for run-time type compatibility.
If TypeOf obArray Is classV()
' obArray can be converted to classV.
v = CType(obArray, classV())
End If
Daha fazla bilgi ve örnek için bkz . Dizi Dönüştürmeleri.
CType Tanımlayan Türler
Tanımladığınız bir sınıf veya yapı üzerinde tanımlayabilirsiniz CType
. Bu, değerleri sınıfınızın veya yapınızın türüne ve türünden dönüştürmenize olanak tanır. Daha fazla bilgi ve örnek için bkz . Nasıl yapılır: Dönüştürme İşleci Tanımlama.
Not
Dönüştürme anahtar sözcüğüyle kullanılan değerler hedef veri türü için geçerli olmalıdır veya bir hata oluşur. Örneğin, bir Long
Integer
öğesine dönüştürmeyi denerseniz değerinin Long
veri türü için Integer
geçerli aralık içinde olması gerekir.
Dikkat
CType
Kaynak türü hedef türden türetilmezse, bir sınıf türünden diğerine dönüştürülecek şekilde belirtilmesi çalışma zamanında başarısız olur. Böyle bir hata bir InvalidCastException özel durum oluşturur.
Ancak, türlerden biri tanımladığınız bir yapı veya sınıfsa ve bu yapı veya sınıf üzerinde tanımladıysanız CType
, dönüştürme, gereksinimlerinizi CType
karşılarsa başarılı olabilir. Bkz . Nasıl yapılır: Dönüştürme İşleci Tanımlama.
Açık dönüştürme gerçekleştirmek, ifadeyi belirli bir veri türüne veya nesne sınıfına atama olarak da bilinir.