Etiketler

, ,


VB.NET de “Casting” | DirectCast vs Ctype

1. VB otomatik olarak tür dönüşümünü yapmaktadır. Varsayılan olarak tüm projede “Option Strict Off” olarak gelmektedir.

Çalışılan sayfa üzerinde, otomatik tür dönüşümünü iptal etmek için “Option Strict On” cümlesini ilgili sayfanın başında tanımlamak gerekir.

Option Strict On
Option Strict Off

Option Strict On” olduğunda VB obje tipinden değişkene yada bir değişken türünden diğerine cast işlemini yapmayacaktır. Tüm solution için “Strict On” yapmak için sadece ilgili solutionun Properties menusünün Compile sekmesinden All Configurations daki Option Strict i On yapmamız yeterlidir.

2. Açık olarak casting işlemi Cint(),CStr(),…,CType(,),DirectCast(,) operatörleri ile gerçekleştirilir.

textbox = CType(obj, TextBox)
textbox = DirectCast(obj, TextBox)

Performas bakımından Cint() ile Ctype( ,) birbirleriyle denk operatörlerdir. Ctype(,) için convert edilen veri tipinin atandığı ifade ile aynı olması yeterliyken, DirectCast(,) objenin run-time tipinin objenin ilk tanımlandığı tiple aynı olması zorunluluğunuda arar. Bu yüzden DirectCast object – to – referance dönüşümü yapar, Ctype(,) her iki dönüşümüde yapabilir.

Performans bakımından DirectCast(,) Ctype(,) dan iki kat daha hızlıdır.

DirectCast(,) eğer run-time da tipler arasında uyuşmazlık varsa InvalidCastException hatası fırlatır.

  • Özetle, DirectCast sadece bize CLR destekli dönüşümlere izin verir. Bu dönüşümlerde VB.net yardımcı (helper) fonksiyonlarını kullanmaz. Bu yüzden performansı Ctype dan daha hızlıdır. Fakat eğer dönüşüm yapmak istediğimiz verinin ilk tanımlandığı tipinden emin değilsek, DirectCast kullanmaktan kaçınmalıyız. Çünkü DirectCast design time da herhangi bir uyarı vermezken, run-time da InvalidCastException fırlatır.