Bagikan melalui


Referensi ke Elemen Yang Dideklarasikan (Visual Basic)

Saat kode Anda mengacu pada elemen yang dideklarasikan, pengkompilasi Visual Basic mencocokkan nama yang Anda referensikan dengan deklarasi yang sesuai dari nama tersebut. Jika lebih dari satu elemen dinyatakan dengan nama yang sama, Anda dapat mengontrol elemen mana yang akan dirujuk dengan memenuhi syarat namanya.

Pengkompilasi mencoba mencocokkan referensi nama dengan deklarasi nama dengan cakupan tersempit. Ini berarti dimulai dengan kode yang merujuk, dan berlanjut melalui tingkat-tingkat elemen yang mengandung secara berurutan.

Contoh berikut menunjukkan referensi ke dua variabel dengan nama yang sama. Contoh mendeklarasikan dua variabel, masing-masing bernama totalCount, pada tingkat cakupan yang berbeda dalam modul container. Ketika prosedur showCount ditampilkan totalCount tanpa kualifikasi, pengkompilasi Visual Basic menyelesaikan referensi ke deklarasi dengan cakupan tersempit, yaitu deklarasi lokal di dalam showCount. Ketika memenuhi syarat totalCount dengan modul containeryang berisi , pengkompilasi menyelesaikan referensi ke deklarasi dengan cakupan yang lebih luas.

' Assume these two modules are both in the same assembly.  
Module container  
    Public totalCount As Integer = 1  
    Public Sub showCount()  
        Dim totalCount As Integer = 6000  
        ' The following statement displays the local totalCount (6000).  
        MsgBox("Unqualified totalCount is " & CStr(totalCount))  
        ' The following statement displays the module's totalCount (1).  
        MsgBox("container.totalCount is " & CStr(container.totalCount))  
    End Sub  
End Module  
Module callingModule  
    Public Sub displayCount()  
        container.showCount()  
        ' The following statement displays the containing module's totalCount (1).  
        MsgBox("container.totalCount is " & CStr(container.totalCount))  
    End Sub  
End Module  

Menetapkan Nama Elemen

Jika Anda ingin mengambil alih proses pencarian ini dan menentukan nama yang dideklarasikan dalam cakupan yang lebih luas, Anda harus memenuhi syarat nama dengan elemen yang berisi cakupan yang lebih luas. Dalam beberapa kasus, Anda mungkin juga harus memenuhi syarat elemen yang berisi.

Memenuhi syarat nama berarti mendahuluinya dalam pernyataan sumber Anda dengan informasi yang mengidentifikasi di mana elemen target ditentukan. Informasi ini disebut string kualifikasi. Ini dapat mencakup satu atau beberapa namespace dan modul, kelas, atau struktur.

String kualifikasi harus secara tidak ambigu menentukan modul, kelas, atau struktur yang berisi elemen target. Kontainer pada gilirannya mungkin terletak di elemen lain yang berisi, biasanya namespace. Anda mungkin perlu menyertakan beberapa elemen yang berisi dalam string kualifikasi.

Untuk mengakses elemen yang dideklarasikan dengan mengkualifikasi namanya

  1. Tentukan lokasi di mana elemen telah ditentukan. Ini mungkin termasuk namespace, atau bahkan hierarki namespace. Dalam namespace tingkat terendah, elemen harus terkandung dalam modul, kelas, atau struktur.

    ' Assume the following hierarchy exists outside your code.  
    Namespace outerSpace  
        Namespace innerSpace  
            Module holdsTotals  
                Public Structure totals  
                    Public thisTotal As Integer  
                    Public Shared grandTotal As Long  
                End Structure  
            End Module  
        End Namespace  
    End Namespace  
    
  2. Tentukan jalur kualifikasi berdasarkan lokasi elemen target. Mulailah dengan namespace tingkat tertinggi, lanjutkan ke namespace layanan tingkat terendah, dan akhiri dengan modul, kelas, atau struktur yang berisi elemen target. Setiap elemen dalam jalur harus berisi elemen yang mengikutinya.

    outerSpace innerSpace → → → holdsTotalstotals

  3. Siapkan string kualifikasi untuk elemen target. Tempatkan titik (.) setelah setiap elemen pada jalur. Aplikasi Anda harus memiliki akses ke setiap elemen dalam string kualifikasi Anda.

    outerSpace.innerSpace.holdsTotals.totals.  
    
  4. Tulis pernyataan ekspresi atau penugasan yang mengacu pada elemen target dengan cara normal.

    grandTotal = 9000  
    
  5. Awali nama elemen target dengan string kualifikasi. Nama harus segera mengikuti periode (.) yang mengikuti modul, kelas, atau struktur yang berisi elemen .

    ' Assume the following module is part of your code.  
    Module accessGrandTotal  
        Public Sub setGrandTotal()  
            outerSpace.innerSpace.holdsTotals.totals.grandTotal = 9000  
        End Sub  
    End Module  
    
  6. Pengompilasi menggunakan string kualifikasi untuk menemukan deklarasi yang jelas dan tidak ambigu yang dapat cocok dengan referensi elemen target.

Anda mungkin juga harus memenuhi syarat referensi nama jika aplikasi Anda memiliki akses ke lebih dari satu elemen pemrograman yang memiliki nama yang sama. Misalnya, namespace System.Windows.Forms dan System.Web.UI.WebControls keduanya berisi kelas Label (System.Windows.Forms.Label dan System.Web.UI.WebControls.Label). Jika aplikasi Anda menggunakan keduanya, atau jika mendefinisikan kelasnya sendiri Label , Anda harus membedakan objek yang berbeda Label . Sertakan namespace atau alias impor dalam deklarasi variabel. Contoh berikut menggunakan alias impor.

' The following statement must precede all your declarations.  
Imports win = System.Windows.Forms, web = System.Web.UI.WebControls  
' The following statement references the Windows.Forms.Label class.  
Dim winLabel As New win.Label()  

Anggota Elemen Mengandung Lainnya

Saat Anda menggunakan anggota kelas atau struktur lain yang tidak bersama, Anda harus terlebih dahulu mengaitkan nama anggota dengan variabel atau ekspresi yang menunjuk ke instans kelas atau struktur. Dalam contoh berikut, demoClass adalah instans kelas bernama class1.

Dim demoClass As class1 = New class1()  
demoClass.someSub[(argumentlist)]  

Anda tidak dapat menggunakan nama kelas sebagai rujukan untuk anggota yang tidak Shared. Anda harus terlebih dahulu membuat instans dalam variabel objek (dalam hal demoClassini ) lalu mereferensikannya dengan nama variabel.

Jika kelas atau struktur memiliki Shared anggota, Anda dapat memenuhi syarat anggota tersebut baik dengan nama kelas atau struktur atau dengan variabel atau ekspresi yang menunjuk ke instans.

Modul tidak memiliki instans terpisah, dan semua anggotanya secara bawaan Shared. Oleh karena itu, Anda mengidentifikasi anggota modul menggunakan nama modul.

Contoh berikut menunjukkan referensi yang terverifikasi untuk prosedur anggota modul. Contoh mendeklarasikan dua Sub prosedur, keduanya bernama perform, dalam modul yang berbeda dalam proyek. Masing-masing dapat ditentukan tanpa kualifikasi dalam modulnya sendiri tetapi harus memenuhi syarat jika dirujuk dari tempat lain. Karena referensi akhir di module3 tidak memenuhi syarat perform, pengkompilasi tidak dapat menyelesaikan referensi tersebut.

' Assume these three modules are all in the same assembly.  
Module module1  
    Public Sub perform()  
        MsgBox("module1.perform() now returning")  
    End Sub  
End Module  
Module module2  
    Public Sub perform()  
        MsgBox("module2.perform() now returning")  
    End Sub  
    Public Sub doSomething()  
        ' The following statement calls perform in module2, the active module.  
        perform()  
        ' The following statement calls perform in module1.  
        module1.perform()  
    End Sub  
End Module  
Module module3  
    Public Sub callPerform()  
        ' The following statement calls perform in module1.  
        module1.perform()  
        ' The following statement makes an unresolvable name reference  
        ' and therefore generates a COMPILER ERROR.  
        perform() ' INVALID statement  
    End Sub  
End Module  

Referensi ke Proyek

Untuk menggunakan elemen Publik yang ditentukan dalam proyek lain, Anda harus terlebih dahulu mengatur referensi ke pustaka rakitan atau pustaka tipe dari proyek tersebut. Untuk mengatur referensi, klik Tambahkan Referensi pada menu Proyek , atau gunakan opsi pengkompilasi baris perintah -reference (Visual Basic ).

Misalnya, Anda dapat menggunakan model objek XML dari .NET Framework. Jika Anda menetapkan referensi ke namespace System.Xml, Anda dapat mendeklarasikan dan menggunakan kelas apa pun di dalamnya, seperti XmlDocument. Contoh berikut menggunakan XmlDocument.

' Assume this project has a reference to System.Xml  
' The following statement creates xDoc as an XML document object.  
Dim xDoc As System.Xml.XmlDocument  

Mengimpor Elemen yang Mengandung

Anda dapat menggunakan Pernyataan Impor (.NET Namespace and Type) untuk mengimpor namespace yang berisi modul atau kelas yang ingin Anda gunakan. Ini memungkinkan Anda untuk merujuk ke elemen yang didefinisikan dalam namespace yang diimpor tanpa perlu menyebutkan nama secara lengkap. Contoh berikut menulis ulang contoh sebelumnya untuk mengimpor System.Xml namespace.

' Assume this project has a reference to System.Xml  
' The following statement must precede all your declarations.  
Imports System.Xml  
' The following statement creates xDoc as an XML document object.  
Dim xDoc As XmlDocument  

Selain itu, Imports pernyataan dapat menentukan alias impor untuk setiap namespace yang diimpor. Ini dapat membuat kode sumber lebih pendek dan lebih mudah dibaca. Contoh berikut menulis ulang contoh sebelumnya untuk digunakan xD sebagai alias untuk System.Xml namespace.

' Assume this project has a reference to System.Xml  
' The following statement must precede all your declarations.  
Imports xD = System.Xml  
' The following statement creates xDoc as an XML document object.  
Dim xDoc As xD.XmlDocument  

Pernyataan ini Imports tidak membuat elemen dari proyek lain tersedia untuk aplikasi Anda. Artinya, tidak menggantikan penentuan referensi. Mengimpor namespace hanya menghapus persyaratan untuk memenuhi syarat nama yang ditentukan dalam namespace tersebut.

Anda juga dapat menggunakan Imports pernyataan untuk mengimpor modul, kelas, struktur, dan enumerasi. Anda kemudian dapat menggunakan anggota elemen yang diimpor tersebut tanpa kualifikasi. Namun, Anda harus selalu menyertakan anggota kelas dan struktur yang bersifat non-shared dengan variabel atau ekspresi yang dievaluasi menjadi instans kelas atau struktur.

Panduan Penamaan

Ketika Anda menentukan dua elemen pemrograman atau lebih yang memiliki nama yang sama, ambiguitas nama dapat menghasilkan ketika pengkompilasi mencoba menyelesaikan referensi ke nama tersebut. Jika lebih dari satu definisi berada dalam cakupan, atau jika tidak ada definisi dalam cakupan, referensi tidak dapat diselesaikan. Misalnya, lihat "Contoh Referensi Yang Memenuhi Syarat" di halaman Bantuan ini.

Anda dapat menghindari ambiguitas nama dengan memberikan semua nama unik elemen Anda. Kemudian Anda dapat membuat referensi ke elemen apa pun tanpa harus memenuhi syarat namanya dengan namespace, modul, atau kelas. Anda juga mengurangi kemungkinan secara tidak sengaja merujuk ke elemen yang salah.

Bayangan

Ketika dua elemen pemrograman memiliki nama yang sama, salah satunya dapat menyembunyikan, atau membayangi, elemen lainnya. Elemen bayangan tidak tersedia untuk referensi; sebagai gantinya, ketika kode Anda menggunakan nama elemen bayangan, pengkompilasi Visual Basic menyelesaikannya ke elemen bayangan. Untuk penjelasan yang lebih rinci dengan contoh, lihat Bayangan di Visual Basic.

Lihat juga