Pernahkah kita bayangkan untuk extended sebuah type lewat type baru tanpa harus inherits dari type tersebut? Atau misalkan sebuah type yang kita buat ingin menggunakan semua fungsionalitas yang terdapat di dalam type tersebut tanpa harus melakukan inheritance? Bukan suatu cara yang effektif kalau kita harus selalu melakukan pewarisan kalau member yang di extend hanya beberapa member saja.
Dengan Extension Methods seorang programmer tidak perlu lagi untuk repot-repot melakukan hal yang saya sebutkan diatas. Kita dapat melakukan ekstensifikasi type dengan menambahkan member baru tanpa harus membuat type baru dengan inheritance. Ekstensifikasi ini dapat dilakukan terhadap Reference dan Value type.
Extension Method di VB.NET harus dideklarasikan didalam Module, tidak dapat dideklarasikan didalam sebuah class. Module dan member yang akan dijadikan sebagai Extension Methods harus diberi atribute <Extension()>. Atribute class tersebut berada di dalam namespace "System.Runtime.CompilerServices", jadi namespace tersebut harus di Imports terlebih dahulu atau menggunakan Fully Qualified Namespace.
Saya akan membuat contoh sederhana untuk mengaplikasikan Extension Methods ini. Misalkan saya akan extend member baru untuk tipe data DateTime. Member yang akan saya tambahkan yaitu berupa fungsi yang akan mengembalikan format tanggal berupa string yang formatnya kita tentukan. Berikut kode nya :
1: Imports System.Runtime.CompilerServices
2:
3: <Extension()> _
4: Module MyExtensionMethods
5:
6: Private Const ddMMyyyy As String = "dd/MM/yyyy"
7: Private Const ddMMMyyyy As String = "dd/MMM/yyyy"
8: Private Const ddMMMMyyyy As String = "dd/MMMM/yyyy"
9:
10: <Extension()> _
11: Public Function MonthInTwo(ByVal Tanggal As DateTime) As String
12: Return Format(Tanggal, ddMMyyyy)
13: End Function
14:
15: <Extension()> _
16: Public Function MonthInThree(ByVal Tanggal As DateTime) As String
17: Return Format(Tanggal, ddMMMyyyy)
18: End Function
19:
20: <Extension()> _
21: Public Function MonthInFour(ByVal Tanggal As DateTime) As String
22: Return Format(Tanggal, ddMMMMyyyy)
23: End Function
24:
25: End Module
Semua member yang akan dijadikan sebagai Extension Methods diberi atribut <Extension()> begitu juga dengan deklarasi modulnya. Code di atas melakukan ekstensifikasi member untuk tipe data DateTime dengan menambahkan fungsi baru yang akan mengembalikan nilai tanggal dengan format yang sudah ditentukan. Untuk menggunakan Extension Methods tersebut dari sebuah class atau modul, kita harus melakukan Imports terlebih dahulu ke Namespace type yang bersangkutan, berikut kode penggunaannya :
1: Imports System.Windows.Forms
2: Imports NewInVB90.MyExtensionMethods
3:
4: Module NewInVB90
5:
6: Sub Main()
7: Dim myDate As DateTime = Now
8: MessageBox.Show(myDate.MonthInTwo, "Extension Methods")
9: MessageBox.Show(myDate.MonthInThree, "Extension Methods")
10: MessageBox.Show(myDate.MonthInFour, "Extension Methods")
11: End Sub
12:
13: End Module
Dari kode di atas dapat kita lihat hasil dari ekstensifikasi method yang dilakukan terhadap tipe data DateTime akan muncul di jendela Intellisense nya...Fitur yang menarik bukan :)