Bagikan melalui


Namespace dalam Visual Basic

Namespace mengatur objek yang ditentukan dalam rakitan. Assembly dapat berisi beberapa namespace, yang pada gilirannya dapat berisi namespace layanan lain. Namespace mencegah ambiguitas dan menyederhanakan referensi saat menggunakan grup besar objek seperti pustaka kelas.

Misalnya, .NET Framework menentukan kelas ListBox di namespace System.Windows.Forms. Fragmen kode berikut menunjukkan cara mendeklarasikan variabel menggunakan nama yang sepenuhnya memenuhi syarat untuk kelas ini:

Dim LBox As System.Windows.Forms.ListBox

Menghindari Tabrakan Nama

.NET Framework namespaces mengatasi masalah yang kadang-kadang disebut polusi namespace, di mana pengembang perpustakaan kelas terhambat oleh penggunaan nama yang sama di perpustakaan lain. Konflik dengan komponen yang ada ini terkadang disebut tabrakan nama.

Misalnya, jika Anda membuat kelas baru bernama ListBox, Anda dapat menggunakannya di dalam proyek Anda tanpa kualifikasi. Namun, jika Anda ingin menggunakan kelas .NET Framework ListBox dalam proyek yang sama, Anda harus menggunakan referensi yang sepenuhnya memenuhi syarat untuk membuat referensi unik. Jika referensi tidak unik, Visual Basic menghasilkan kesalahan yang menyatakan bahwa namanya ambigu. Contoh kode berikut menunjukkan cara mendeklarasikan objek ini:

' Define a new object based on your ListBox class.
Dim LBC As New ListBox
' Define a new Windows.Forms ListBox control.
Dim MyLB As New System.Windows.Forms.ListBox

Ilustrasi berikut menunjukkan dua hierarki namespace, keduanya berisi objek bernama ListBox:

Screenshot that shows two namespace hierarchies.

Secara default, setiap file yang dapat dieksekusi yang Anda buat dengan Visual Basic berisi namespace dengan nama yang sama dengan proyek Anda. Misalnya, jika Anda menentukan objek dalam proyek bernama ListBoxProject, file yang dapat dieksekusi ListBoxProject.exe berisi namespace yang disebut ListBoxProject.

Beberapa rakitan dapat menggunakan namespace yang sama. Visual Basic memperlakukannya sebagai satu set nama. Misalnya, Anda dapat menentukan kelas untuk namespace layanan yang disebut SomeNameSpace dalam rakitan bernama Assemb1, dan menentukan kelas tambahan untuk namespace yang sama dari perakitan bernama Assemb2.

Nama yang Sepenuhnya Memenuhi Syarat

Nama yang sepenuhnya memenuhi syarat adalah referensi objek yang diawali dengan nama namespace tempat objek ditentukan. Anda dapat menggunakan objek yang ditentukan dalam proyek lain jika Anda membuat referensi ke kelas (dengan memilih Tambahkan Referensi dari menu Project) lalu menggunakan nama yang sepenuhnya memenuhi syarat untuk objek dalam kode Anda. Fragmen kode berikut menunjukkan cara menggunakan nama yang sepenuhnya memenuhi syarat untuk objek dari namespace proyek lain:

Dim LBC As New ListBoxProject.Form1.ListBox

Nama yang sepenuhnya memenuhi syarat mencegah konflik penamaan karena memungkinkan pengkompilasi untuk menentukan objek mana yang sedang digunakan. Namun, nama-nama itu sendiri bisa menjadi panjang dan rumit. Untuk mengatasi hal ini, Anda dapat menggunakan pernyataan Imports untuk menentukan alias—nama singkatan yang dapat Anda gunakan sebagai pengganti nama yang sepenuhnya memenuhi syarat. Misalnya, contoh kode berikut membuat alias untuk dua nama yang sepenuhnya memenuhi syarat, dan menggunakan alias ini untuk menentukan dua objek.

Imports LBControl = System.Windows.Forms.ListBox
Imports MyListBox = ListBoxProject.Form1.ListBox
Dim LBC As LBControl
Dim MyLB As MyListBox

Jika Anda menggunakan pernyataan tanpa alias Imports, Anda dapat menggunakan semua nama di namespace tersebut tanpa kualifikasi, asalkan unik untuk proyek. Jika proyek Anda berisi pernyataan Imports untuk namespace yang berisi item dengan nama yang sama, Anda harus sepenuhnya memenuhi syarat nama tersebut saat menggunakannya. Diibaratkan, sebagai contoh, proyek Anda berisi dua pernyataan Imports berikut:

' This namespace contains a class called Class1.
Imports MyProj1
' This namespace also contains a class called Class1.
Imports MyProj2

Jika Anda mencoba untuk menggunakan Class1 tanpa sepenuhnya memenuhi syarat, Visual Basic menghasilkan kesalahan yang menyatakan bahwa nama Class1 tersebut ambigu.

Pernyataan Tingkat Namespace

Dalam namespace, Anda dapat menentukan item seperti modul, antarmuka, kelas, delegasi, enumerasi, struktur, dan namespace lainnya. Anda tidak dapat menentukan item seperti properti, prosedur, variabel, dan peristiwa di tingkat namespace. Item ini harus dideklarasikan dalam kontainer seperti modul, struktur, atau kelas.

Kata Kunci Global dalam Nama yang Sepenuhnya Memenuhi Syarat

Jika Anda telah menentukan hierarki namespace berlapis, kode di dalam hierarki System tersebut mungkin diblokir agar tidak mengakses namespace layanan .NET Framework. Contoh berikut mengilustrasikan hierarki di mana namespace SpecialSpace.System memblokir akses ke System.

Namespace SpecialSpace  
    Namespace System  
        Class abc  
            Function getValue() As System.Int32  
                Dim n As System.Int32  
                Return n  
            End Function  
        End Class  
    End Namespace  
End Namespace  

Akibatnya, pengkompilasi Visual Basic tidak dapat berhasil menyelesaikan referensi ke System.Int32, karena SpecialSpace.System tidak menentukan Int32. Anda dapat menggunakan kata kunci Global untuk memulai rantai kualifikasi di tingkat terluar pustaka kelas .NET Framework. Ini memungkinkan Anda menentukan namespace System atau namespace lainnya di pustaka kelas. Contoh berikut mengilustrasikan langkah-langkah ini:

Namespace SpecialSpace  
    Namespace System  
        Class abc  
            Function getValue() As Global.System.Int32  
                Dim n As Global.System.Int32  
                Return n  
            End Function  
        End Class  
    End Namespace  
End Namespace  

Anda dapat menggunakan Global untuk mengakses namespace tingkat akar lainnya, seperti Microsoft.VisualBasic, dan namespace apa pun yang terkait dengan proyek Anda.

Kata Kunci Global dalam Pernyataan Namespace

Anda juga dapat menggunakan kata kunci Global dalam Pernyataan Namespace. Ini memungkinkan Anda menentukan namespace dari namespace akar proyek Anda.

Semua namespace dalam proyek Anda didasarkan pada namespace layanan akar untuk proyek. Visual Studio menetapkan nama proyek Anda sebagai namespace akar default untuk semua kode dalam proyek Anda. Misalnya, jika proyek Anda diberi nama ConsoleApplication1, elemen pemrogramannya milik namespace ConsoleApplication1. Jika Anda menyatakan Namespace Magnetosphere, referensi ke Magnetosphere dalam proyek akan mengakses ConsoleApplication1.Magnetosphere.

Contoh berikut menggunakan kata kunci Global untuk mendeklarasikan namespace di luar namespace layanan akar untuk proyek.

Namespace Global.Magnetosphere

End Namespace


Namespace Global
    Namespace Magnetosphere

    End Namespace
End Namespace

Dalam deklarasi namespace, Global tidak dapat ditumpuk di namespace layanan lain.

Anda dapat menggunakan Halaman Aplikasi, Project Designer (Visual Basic) untuk melihat dan mengubah Namespace Layanan Akar proyek. Untuk proyek baru, Namespace Layanan Akar default ke nama proyek. Untuk menyebabkan Global menjadi namespace tingkat atas, Anda dapat menghapus entri Namespace Layanan Akar sehingga kotak kosong. Membersihkan Namespace Layanan Akar menghapus kebutuhan akan kata kunci Global dalam deklarasi namespace.

Jika pernyataan Namespace mendeklarasikan nama yang juga merupakan namespace layanan dalam .NET Framework, namespace .NET Framework menjadi tidak tersedia jika kata kunci Global tidak digunakan dalam nama yang sepenuhnya memenuhi syarat. Untuk mengaktifkan akses ke namespace .NET Framework tersebut tanpa menggunakan kata kunci Global, Anda dapat menyertakan kata kunci Global dalam pernyataan Namespace.

Contoh berikut memiliki kata kunci Global dalam deklarasi namespace System.Text.

Jika kata kunci Global tidak ada dalam deklarasi namespace, StringBuilder tidak dapat diakses tanpa menentukan Global.System.Text.StringBuilder. Untuk proyek bernama ConsoleApplication1, referensi akan System.Text mengakses ConsoleApplication1.System.Text jika kata kunci Global tidak digunakan.

Module Module1
    Sub Main()
        Dim encoding As New System.Text.TitanEncoding

        ' If the namespace defined below is System.Text
        ' instead of Global.System.Text, then this statement
        ' causes a compile-time error.
        Dim sb As New System.Text.StringBuilder
    End Sub
End Module

Namespace Global.System.Text
    Class TitanEncoding

    End Class
End Namespace

Lihat juga