Bagikan melalui


Referensi ke Elemen yang Dideklarasikan (Visual Basic)

Saat kode Anda merujuk ke elemen yang dideklarasikan, pengkompilasi Visual Basic mencocokkan nama dalam referensi Anda dengan deklarasi nama tersebut yang sesuai. Jika lebih dari satu elemen dideklarasikan 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 membuat referensi dan bekerja keluar melalui tingkat berturut-turut elemen berisi.

Contoh berikut menunjukkan referensi ke dua variabel dengan nama yang sama. Contoh tersebut mendeklarasikan dua variabel, masing-masing bernama totalCount, pada tingkat cakupan yang berbeda dalam modul container. Ketika prosedur showCount menampilkan 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 container yang 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  

Memenuhi syarat 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 pada 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 layanan dan modul, kelas, atau struktur.

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

Untuk mengakses elemen yang dideklarasikan dengan memenuhi syarat namanya

  1. Tentukan lokasi di mana elemen telah ditentukan. Ini mungkin termasuk namespace layanan, atau bahkan hierarki namespace. Dalam namespace tingkat terendah, elemen harus dimuat 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 tingkat terendah, dan akhiri dengan modul, kelas, atau struktur yang berisi elemen target. Setiap elemen dalam jalur harus berisi elemen yang mengikutinya.

    outerSpaceinnerSpaceholdsTotalstotals

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

    outerSpace.innerSpace.holdsTotals.totals.  
    
  4. Tulis pernyataan penugasan atau ekspresi 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 layanan 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 Label yang berbeda. Sertakan namespace layanan atau impor alias 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 Lain yang Berisi

Saat Anda menggunakan anggota yang tidak dibagikan dari kelas atau struktur lain, Anda harus terlebih dahulu memenuhi syarat 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 itu sendiri untuk memenuhi syarat anggota yang tidak Dibagikan. Anda harus terlebih dahulu membuat instans dalam variabel objek (dalam kasus demoClass ini) lalu mereferensikannya dengan nama variabel.

Jika kelas atau struktur memiliki anggota Shared, 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 Shared secara default. Oleh karena itu, Anda memenuhi syarat anggota modul dengan nama modul.

Contoh berikut menunjukkan referensi yang memenuhi syarat untuk prosedur anggota modul. Contohnya mendeklarasikan dua prosedur Sub, keduanya bernama perform, dalam modul yang berbeda dalam suatu 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 jenis atau rakitan proyek tersebut. Untuk mengatur referensi, klik Tambahkan Referensi pada menu Project, atau gunakan opsi pengkompilasi baris perintah -reference (Visual Basic).

Misalnya, Anda dapat menggunakan model objek XML dari .NET Framework. Jika Anda mengatur referensi ke namespace layanan System.Xml, Anda dapat mendeklarasikan dan menggunakan salah satu kelasnya, 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 Berisi

Anda dapat menggunakan Pernyataan Impor (Jenis dan Namespace) untuk mengimpor namespace yang berisi modul atau kelas yang ingin Anda gunakan. Ini memungkinkan Anda untuk merujuk ke elemen yang ditentukan dalam namespace yang diimpor tanpa sepenuhnya memenuhi syarat namanya. Contoh berikut meregenerasi contoh sebelumnya untuk mengimpor namespace System.Xml.

' 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, pernyataan Imports dapat menentukan alias impor untuk setiap namespace yang diimpor. Ini dapat membuat kode sumber lebih pendek dan lebih mudah dibaca. Contoh berikut meregenerasi contoh sebelumnya untuk menggunakan xD sebagai alias untuk namespace System.Xml.

' 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 Imports tidak membuat elemen dari proyek lain tersedia untuk aplikasi Anda. Artinya, pernyataan tersebut tidak mengambil tempat pengaturan referensi. Mengimpor namespace layanan hanya menghapus persyaratan untuk memenuhi syarat nama yang ditentukan dalam namespace tersebut.

Anda juga dapat menggunakan pernyataan Imports untuk mengimpor modul, kelas, struktur, dan enumerasi. Anda kemudian dapat menggunakan anggota elemen yang diimpor tersebut tanpa kualifikasi. Namun, Anda harus selalu memenuhi syarat anggota kelas dan struktur yang tidak dibagikan dengan variabel atau ekspresi yang mengevaluasi ke instans kelas atau struktur.

Pedoman Penamaan

Ketika Anda menentukan dua elemen pemrograman atau lebih yang memiliki nama yang sama, ambiguitas nama dapat dihasilkan ketika pengkompilasi mencoba untuk 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, yang lain. Elemen bayangan tidak tersedia untuk referensi; sebaliknya, ketika kode Anda menggunakan nama elemen bayangan, pengkompilasi Visual Basic menyelesaikannya ke elemen bayangan. Untuk penjelasan yang lebih rinci dengan contoh, lihat Bayangan dalam Visual Basic.

Lihat juga