What is your choice? CType, DirectCast, or TryCast?

.NET Framework , Posted at : Sep/15/2008  
3977 Views   0 Comments

Dalam pembuatan aplikasi aktivitas konversi satu tipe data ke tipe data lain seringkali tidak dapat dihindari. Ada dua jenis konversi, yaitu Implicit dan Explicit. Implicit konversi terjadi ketika hasil konversi tidak ingin kehilangan presisi datanya, sedangkan Explicit sebaliknya, yaitu jika kita "mengijinkan" adanya kehilangan presisi data untuk hasil konversinya.

Dalam posting artikel kali ini saya akan membahas beberapa operator yang dapat digunakan untuk melakukan Explicit Conversion yaitu CType, DirectCast dan TryCast di VB. Mungkin diantara kalian ada yang sudah familiar dengan operator diatas. Namun apakah kita mengetahui perbedaannya? Ok...mari kita bahas satu persatu.

CType merupakan operator yang digunakan untuk explicit conversion. Type data yang dijadikan acuan tidak dibatasi, bisa berupa Reference type atau Value type.

DirectCast merupakan operator explicit conversion seperti halnya CType. Namun operator ini hanya berlaku untuk Reference type saja (Class atau Interface).

TryCast merupakan operator explicit conversion yang baru ada di .net 2.0. Operator ini fungsinya sama dengan DirectCast operator, dan hanya berlaku untuk Reference type saja. Namun apabila terjadi InvalidCastException maka hasil dari conversion ini akan mengembalikan Nothing value. Fitur ini dapat menyederhanakan proses exception handling.

Saya akan buat contoh untuk ketiga penggunaan operator diatas. Misalkan saya buat class dan interface seperti dibawah ini :

   1: Public Interface IGuitarEffect
   2:     Sub Distorsi(ByVal Off As Boolean)
   3: End Interface
   4: 
   5: Public Class AccousticGuitar
   6: 
   7: End Class
   8: 
   9: Public Class RhytmGuitar
  10:     Implements IGuitarEffect
  11: 
  12:     Public Sub Distorsi(ByVal Off As Boolean) Implements IGuitarEffect.Distorsi
  13:         If (Off) Then
  14:             Console.WriteLine("Clean Sound!")
  15:         Else
  16:             Console.WriteLine("Crunchy Sound!")
  17:         End If
  18:         Console.ReadLine()
  19:     End Sub
  20: End Class

pada Sub Main (saya menggunakan Console Application) saya buat code untuk konversi class RhytmGuitar ke Interface IGuitarEffect dengan menggunakan operator CType dan DirectCast :

   1: Sub Main()
   2:     Dim PRSTremontiSE As New RhytmGuitar
   3:     Dim iGE1 As IGuitarEffect = CType(PRSTremontiSE, IGuitarEffect)
   4:     iGE1.Distorsi(False)
   5: 
   6:     Dim N4 As New RhytmGuitar
   7:     Dim iGE2 As IGuitarEffect = DirectCast(N4, IGuitarEffect)
   8:     iGE2.Distorsi(True)

hasilnya :

Best practice diantara kedua operator tersebut yaitu, gunakan DirectCast jika konversi yang dilakukan merupakan Reference type, dan sebaliknya gunakan CType kalau konversi dilakukan terhadap Value type. DirectCast tidak dapat dilakukan untuk konversi antar Value type. Jika hal tersebut dilakukan maka akan menghasilkan compile time error, berikut contohnya :

   1: '//we can't use DirectCast to cast Value type
   2: '//it would get a compile time error!
   3: Dim aByte As Byte
   4: Dim aInt As Integer
   5: aInt = DirectCast(aByte, Integer)

Sekarang mari kita lihat code berikut :

   1: '//it would generate run time error
   2: '//since not implement the IGuitarEffect interface
   3: Try
   4:     Dim CG40 As New AccousticGuitar
   5:     Dim iGE3 As IGuitarEffect = CType(CG40, IGuitarEffect)
   6: Catch ex As Exception
   7:     Console.WriteLine(ex.Message)
   8:     Console.ReadLine()
   9: End Try

Kode tersebut akan menghasilkan run time error, karena AccousticGuitar class tidak implement IGuitarEffect interface. Maka ketika kode tersebut dijalankan akan menghasilkan InvalidCastException seperti yang diperlihatkan pada screen shoot dibawah ini :

Operator TryCast dapat digunakan untuk menyederhanakan kode diatas :

   1: '//instead of using the exception handling above
   2: '//we can use TryCast operator
   3: Dim CortCEC1 As New AccousticGuitar
   4: Dim iGE5 As IGuitarEffect = TryCast(CortCEC1, IGuitarEffect)
   5: If iGE5 Is Nothing Then
   6:     Console.WriteLine("Invalid Cast Exception!")
   7:     Console.ReadLine()
   8: End If

hasilnya :

Dalam penggunaan operator TryCast kita tidak perlu menggunakan Exception class, karena apabila terjadi exception maka hasilnya akan mengembalikan Nothing value.

 


[Comments]

[Write your comment]
Name (required)
Email (required-will not published)
 
Comment

irtu
Input code above below (Case Sensitive) :
About Me 
Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Microsoft Certified Trainer | IT Trainer at Native Enterprise | IT Consultant | Software Developer | MCAD | MCPD | MOS | Bandung, West Java, Indonesia.
[Read More...]
Top Download 
Mapping Hak Akses User Pada MenuStrip Sampai Control Button : Downloaded 5921 times  
Bagaimana caranya menginstal database ketika deploying sebuah aplikasi? : Downloaded 4656 times  
Simple Voice Engine Application With Sound Player Class... : Downloaded 3432 times  
Change Group,Sort Order, Filtering By Date in Crystal Reports : Downloaded 3291 times  
WinForms DataGrid Paging With SqlDataAdapter : Downloaded 2671 times  
Links 
Certifications 
MOS 2007
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench
Native Enterprise 
Follow Me 
Facebook   LinkedIn   Twitter
Syndication 
Hosted By 
Native Enterprise News 
© Copyright 2006-2016   Rully Yulian MF   All rights reserved.