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

Posted at : Sep/15/2008
4684 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
ZMQN
Input code above below (Case Sensitive) :

ABOUT ME

Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Founder & IT Trainer Native Enterprise | MCT (2008-2019) | MVP (2009-2016) | Xamarin Certified Professional | MTA | MCAD | MCPD | MOS | Bandung, West Java, Indonesia.

[Read More...]

TOP DOWNLOAD

Mapping Hak Akses User Pada MenuStrip Sampai Control Button
downloaded 6982 times

Bagaimana caranya menginstal database ketika deploying sebuah aplikasi?
downloaded 4893 times

Simple Voice Engine Application With Sound Player Class...
downloaded 4045 times

Change Group,Sort Order, Filtering By Date in Crystal Reports
downloaded 3460 times

WinForms DataGrid Paging With SqlDataAdapter
downloaded 2881 times


LINKS

CERTIFICATIONS

Xamarin Certified
MOS 2007
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench

NATIVE ENTERPRISE

Native Enterprise - IT Training

FOLLOW ME

Youtube  Facebook  Instagram  LinkedIn   Twitter

RSS


NATIVE ENTERPRISE NEWS

© Copyright 2006 - 2024   Rully Yulian MF   All rights reserved.