Bagikan melalui


Namespace di Visual Basic

Namespace mengorganisir objek yang didefinisikan dalam assembly. Rakitan dapat berisi beberapa namespace, yang pada gilirannya dapat berisi namespace lain. Namespace mencegah ambiguitas dan menyederhanakan referensi saat menggunakan grup besar objek seperti pustaka kelas.

Misalnya, .NET Framework mendefinisikan ListBox kelas di System.Windows.Forms namespace. 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

Namespace .NET Framework mengatasi masalah yang terkadang disebut polusi namespace, di mana pengembang pustaka kelas terhambat oleh penggunaan nama yang serupa di pustaka lain. Konflik ini dengan komponen yang ada terkadang disebut benturan 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:

Cuplikan layar yang memperlihatkan dua hierarki namespace.

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 yang disebut SomeNameSpace dalam rakitan bernama Assemb1, dan menentukan kelas tambahan untuk namespace yang sama dari rakitan 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 Proyek ) 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 menentukan objek mana yang digunakan. Namun, nama-nama itu sendiri bisa menjadi panjang dan rumit. Untuk mengatasi hal ini, Anda dapat menggunakan Imports pernyataan 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 Imports tanpa alias, Anda dapat menggunakan semua nama di namespace tersebut tanpa penjelasan tambahan, asalkan unik untuk proyek. Jika proyek Anda berisi Imports pernyataan untuk namespace yang berisi item dengan nama yang sama, Anda harus sepenuhnya memenuhi syarat nama tersebut saat menggunakannya. Misalkan, misalnya, proyek Anda berisi dua Imports pernyataan berikut:

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

Jika Anda mencoba menggunakan Class1 tanpa sepenuhnya memenuhi syarat, Visual Basic menghasilkan kesalahan yang menyatakan bahwa namanya Class1 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 tersebut System mungkin diblokir agar tidak mengakses namespace .NET Framework. Contoh berikut mengilustrasikan hierarki di mana SpecialSpace.System namespace 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 mengatasi referensi ke System.Int32, karena SpecialSpace.System tidak menentukan Int32. Anda dapat menggunakan kata kunci Global untuk memulai rantai kualifikasi pada tingkat terluar dari pustaka kelas .NET Framework. Ini memungkinkan Anda menentukan System namespace atau namespace lainnya di pustaka kelas. Contoh berikut mengilustrasikan hal 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 layanan 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 Global kata kunci dalam Pernyataan Namespace. Ini memungkinkan Anda menentukan namespace di luar namespace akar proyek Anda.

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

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

Namespace Global.Magnetosphere

End Namespace


Namespace Global
    Namespace Magnetosphere

    End Namespace
End Namespace

Dalam deklarasi namespace, Global tidak dapat disematkan di namespace lain.

Anda dapat menggunakan Halaman Aplikasi, Perancang Proyek (Visual Basic) untuk melihat dan memodifikasi Ruang Nama Akar proyek. Untuk proyek baru, Ruang Nama Root secara otomatis akan menjadi nama proyek. Untuk membuat Global menjadi namespace tingkat atas, Anda dapat menghapus entri Root Namespace sehingga kotaknya kosong. Menghapus Namespace Akar menghilangkan kebutuhan akan kata kunci Global dalam deklarasi namespace.

Namespace Jika pernyataan mendeklarasikan nama yang juga merupakan namespace dalam .NET Framework, namespace .NET Framework menjadi tidak tersedia jika kata kunci Global tidak digunakan dalam nama yang disebutkan secara lengkap. Untuk mengaktifkan akses ke namespace .NET Framework tanpa menggunakan kata kunci Global, Anda bisa menyertakan kata kunci Global dalam pernyataan Namespace.

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

Global Jika kata kunci tidak ada dalam deklarasi namespace, StringBuilder tidak dapat diakses tanpa menentukan Global.System.Text.StringBuilder. Untuk proyek bernama ConsoleApplication1, referensi System.Text akan mengakses ConsoleApplication1.System.Text jika Global kata kunci 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