New VB 11 Global Namespace

Posted at : Jun/06/2012
3070 Views | 3 Comments

Salah satu fitur baru yang terdapat di VB 11 yaitu Global Namespace. Penggunaan keyword Global ditujukan untuk menghindari konflik pembuatan class dengan nama class atau namespace yang sudah tersedia di .NET framework class library seperti misalnya System. Selain itu fitur baru tersebut juga dapat digunakan untuk menghilangkan penggunaan root namespace terhadap beberapa class yang terdapat di dalam sebuah komponen yang diturunkan secara implisit dari nama project yang digunakan.

Pada artikel ini saya akan memberikan beberapa implementasi penggunaan Global namespace di VB 11. Tools yang digunakan yaitu Visual Studio 2012 Release Candidate .

A. Penggunaan Global namespace secara penuh (Fully Qualified Namespace)

1. Buat sebuah Console Application dan tambahkan class berikut ini di project tersebut :

Public Class NativeEnterprise
    Public Class System
        Public Function SumNumber(ByVal Num1 As Integer,
                                  ByVal Num2 As Integer) _
                              As System.Int32

        End Function

    End Class
End Class

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 :)


[Comments]

Eriawan Kusumawardho (Jun/07/2012 12:17:24)

Koreksi dikit bro Rully..

Itu seharusnya di deklarasi Module tidak perlu ditambahkan attribute Extension udah bisa jadi extension method, walaupun scope dari atttibute Extension ini juga termasuk class dan assembly.

Silakan lihat di:

http://msdn.microsoft.com/en-us/library/bb384936

 

 

Rully (Jun/07/2012 04:02:06)

Eriawan > Ok...thanks info nya :)

Eriawan Kusumawardho (Jun/08/2012 09:08:42)

Sama-sama bro :)


[Write your comment]

Name (required)

Email (required-will not published)

 
Comment
QNPO
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.