Dengan fitur baru ini kita dapat melakukan inisialisasi sebuah object seperti sintaks yang biasa dilakukan terhadap sebuah array. Apabila sebuah class mempunyai sebuah constructor saja, katakanlah default constructor, maka untuk mengakses member property / public variabel yang terdapat di dalam class itu kita harus assign value terhadap sejumlah properti yang akan diberi nilai. Satu line satu assign property.
Dengan Object initialization Expressions maka hal tersebut diatas tidak harus selalu kita lakukan. Fitur ini memberikan keleluasaan programmer untuk melakukan inisialisasi object dengan langsung memberikan valuenya terhadap properti / public variabel yang diiginkan dalam satu baris kode, meskipun class tersebut hanya memiliki satu constructor saja.
Untuk menggunkan fitur ini ada beberapa pilihan cara pendeklarasian kode yang dapat kita gunakan. Cara pertama seperti yang biasa dilakukan ketika inisialisasi object, cara kedua kita bisa gunakan juga local type inference, kemudian cara lainnya yaitu dengan menggunakan teknik Anonymous Type.
Pada artikel ini saya akan memberikan contoh ketiga cara diatas dalam menggunakan Object Initialization Expressions. Pertama saya akan buat class, say it MyFaveGuitarist class :)
Public Class MyFaveGuitarist
Public Name As String
Public Band As String
Public Country As String
Public Sub New()
'//default constructor
End Sub
Public Sub New(ByVal Name As String)
Me.Name = Name
End Sub
Public Sub New(ByVal Name As String, ByVal Country As String)
Me.Name = Name
Me.Country = Country
End Sub
End Class
Class tersebut memiliki tiga public variabel dan tiga constructor. Sekarang kita lihat contoh penggunaan dari fitur Object Initialization Expression dengan melakukan instantiasi terhadap class tersebut dengan beberapa cara :
Imports System.Windows.Forms
Module NewInVB90
Sub Main()
Dim myFave1 As MyFaveGuitarist
myFave1 = New MyFaveGuitarist("Andra Ramadhan") _
With {.Band = "Andra & The Backbone"}
myFave1.Country = "Indonesia"
MessageBox.Show(myFave1.Name & ", " & myFave1.Band & ", " _
& myFave1.Country)
Dim myFave2 As New MyFaveGuitarist() _
With {.Name = "Paul Gilbert", .Country = "USA"}
MessageBox.Show(myFave2.Name & ", " & myFave2.Country)
'//local type inference
Dim myFave3 = New MyFaveGuitarist("Nuno Bettencourt", "USA") _
With {.Band = "It was Extreme"}
'//cek type dari object tsb :
MessageBox.Show(myFave3.GetType.ToString)
'//anomymous type
Dim myFave4 = New With {.Name = "Steve Vai", .Country = "USA"}
'//cek type dari object tsb :
MessageBox.Show(myFave4.GetType.ToString)
'//anomymous type
Dim myFave5 = New With {.Name = "Eross Chandra"}
'//cek type dari object tsb :
MessageBox.Show(myFave5.GetType.ToString)
End Sub
End Module
Object Initialization Expressions (saya singkat OIE, biar ga kepanjangan :) ) di VB 9.0 ditandai dengan keyword "With", diikuti dengan Curly Bracket (mirip inisialisasi array). Didalam curly bracket tsb untuk mengakses public membernya digunakan tanda titik sehingga Intellisense nya muncul. Dengan OIE ini kita dapat sekaligus akses public member yang tidak terdapat di dalam constructornya.
Fitur local type inference juga dapat kita gunakan. Dapat kita lihat dari deklarasi variable myFave3 berupa message seperti ini :
Anonymous Type juga dapat menggunakan OIE ini. Message yang dihasilkan dari variabel myFave4 yaitu :
Untuk anonymous type variabel myFave5 messagenya seperti ini :
Kedua message yang dihasilkan dari kedua anonymous type tersebut didefinisikan oleh VB dengan nama "VB$AnonymousType" , angka pertama menunjukan urutan instance object tersebut, angka kedua menunjukkan jumlah parameter yang digunakan, kemudian informasi terakhir yaitu berupa tipe data yang digunakan untuk parameter tersebut.