Pada artikel ini saya akan memberikan beberapa implementasi penggunaan Global namespace di VB 11. Tools yang digunakan yaitu Visual Studio 2012 Release Candidate .
1. Buat sebuah Console Application dan tambahkan class berikut ini di project tersebut :
Visual Studio akan memberikan informasi error berikut ini :

Hal tersebut disebabkan karena penggunaan class System di project tersebut, sehingga namespace System yang terdapat di .NET framework library tidak dapat diakses karena seolah-olah tertutup oleh custom class System yang dibuat.
Sebagai solusinya kita dapat menggunakan Global namespace secara penuh pada tipe data yang dikembalikan dari fungsi SumNumber di atas untuk mengakses member yang terdapat di dalam namespace System .NET. Berikut ini kode nya (perhatikan penggunaan Global.System.Int32) :
Public Class NativeEnterprise
Public Class System
Public Function SumNumber(ByVal Num1 As Integer,
ByVal Num2 As Integer) _
As Global.System.Int32
End Function
End Class
End Class
Hasilnya tidak terdapat error pada saat class tersebut diakses :
Module Module1
Sub Main()
Dim obj As New NativeEnterprise.System
End Sub
End Module
B. Penggunaan Global namespace untuk menghilangkan penggunaan root namespace project.
1. Buat sebuah Class Library project di solution yang sama dengan project Console di atas, kemudian ketikkan kode-kode berikut ini :
Public Class Trainee
Public Sub RegisterTrainee(ByVal TrainingCode As String)
End Sub
End Class
Public Class Trainer
Public Sub RegisterTrainer(ByVal TrainingCode As String)
End Sub
End Class
Public Class Utility
Public Shared Function GetTrainingDuration(
ByVal TrainingCode As String) As Integer
End Function
End Class
Buka properties project dan perhatikan root namespace yang digunakan oleh project tersebut secara default menggunakan nama project :

2. Tambahkan referensi ke Class Library project dari project Console di atas, dan ketikkan kode berikut ini :
Module Module1
Sub Main()
Dim obj1 As New NativeEnterprise.Trainee
obj1.RegisterTrainee("NCMCTS001")
Dim obj2 As New NativeEnterprise.Trainer
obj2.RegisterTrainer("NCMCITP002")
Dim intDuration =
NativeEnterprise.Utility.GetTrainingDuration("NCVS002")
End Sub
End Module
Untuk mengakses member yang terdapat didalam sebuah komponen, object yang diinstantiasi harus diakses melalui root namespacenya secara penuh atau dengan mengimport namespace tersebut. Bagaimana apabila kita menginginkan beberapa class diakses tanpa harus melalui root namespace, misalnya untuk class-class yang memiliki shared member? Cara yang konvensional yaitu dengan menghapus root namespacenya dan mengetikkan namespace secara manual di beberapa class yang diinginkan. Tentunya hal tersebut cukup merepotkan.
Solusinya yaitu dengan menambahkan namespace Global di class-class yang dibutuhkan. Penggunaan namespace Global harus diletakkan di root namespace dan tidak dapat ditempatkan di dalam nested namespace. Berikut ini adalah kodenya :
Namespace Global
Public Class Utility
Public Shared Function GetTrainingDuration(
ByVal TrainingCode As String) As Integer
End Function
End Class
End Namespace
Modifikasi class diatas akan membuat kode yang dibuat sebelumnya mengalami error :

Untuk menghilangkan error tersebut cukup dengan menghapus root namespace “NativeEnterprise” seperti berikut ini :
Module Module1
Sub Main()
Dim obj1 As New NativeEnterprise.Trainee
obj1.RegisterTrainee("NCMCTS001")
Dim obj2 As New NativeEnterprise.Trainer
obj2.RegisterTrainer("NCMCITP002")
Dim intDuration = Utility.GetTrainingDuration("NCVS002")
End Sub
End Module
C. Penggunaan Global namespace dalam extension method
Kegunaan lain dari Global namespace ini ialah dalam pembuatan extension method, sehingga dalam penggunaanya kita tidak perlu lagi menggunakan perintah Import terhadap Module dimana extension method tersebut di deklarasikan. Berikut ini adalah contohnya :
Imports System.Runtime.CompilerServices
Namespace Global
<Extension>
Public Module ExtensionModule
<Extension>
Public Function TanggalLengkap(
ByVal Tanggal As DateTime) As String
Return Tanggal.ToString("dd-MMMM-yyyy")
End Function
End Module
End Namespace
Untuk mengakses extension method diatas cukup dengan memanggil method tersebut tanpa harus melakukan Imports namespace :
'--Imports NativeEnterprise.ExtensionModule--
Module Module1
Sub Main()
Dim objDate As DateTime = Now
Console.WriteLine(objDate.TanggalLengkap)
Console.ReadLine()
End Sub
End Module
Selamat mencoba :)