.comment-link {margin-left:.6em;}

Sunday, February 13, 2005

 

unboxing in VB is different than C#

another point for VB against C#

let's do this example :

in C# :

int i = 7;

object myObj;

myObj = (object)i; //boxing

long j = (long)o;     //InvalidCastException    

the CLR will only let you convert it back to Integer

 

in VB :

Dim i As Integer = 4

Dim myobj As Object

myobj = i  'boxing

Dim j As Long = CType(myobj, Long)    'unboxing works fine

'However

Dim k as long = DirectCast (myobj, Long)  'Generates an error coz DirectCast Bypass VB Helper Funs

How is Works :

To make this work, the compiler emits a conversion from Object as a call to a helper function. The helper function takes the Object, looks at the type of the value contained in it and then does the appropriate conversion to the target type. this means an extra step . it might be an extra step in the wrong direction in case i know the returned type , so i will only lose some performace.

so the Rule is : if i know the result TYPE i would use DirectCast which bypasses the VB helper functions , and i get some performance gain .

as you see , the Default is the helper funs , so the language by default (cint , clong , ctype , etc ... ) can unbox to any type unless you need to switch off this nice feature using DirectCast .

this means that , it is not possible to express all VB language in IL . there are some helper functions like Late Binding ( i will take about this later in coming post) which is not found in IL . that's why we need Microsoft.visualbasic.dll in all the VB projects and we cannot remove that reference .

 

 

 


Comments: Post a Comment



<< Home

This page is powered by Blogger. Isn't yours?