Bagikan melalui


Cara: Menyembunyikan Variabel dengan Nama yang Sama dengan Variabel Anda (Visual Basic)

Anda dapat menyembunyikan variabel dengan membayanginya , yaitu dengan mendefinisikannya kembali dengan variabel dengan nama yang sama. Anda dapat menyembunyikan variabel yang ingin Anda sembunyikan dengan dua cara:

  • Penutupan Melalui Ruang Lingkup. Anda dapat membayangi variabel tersebut melalui ruang lingkup dengan mendeklarasikannya kembali di dalam bagian wilayah tempat variabel yang ingin Anda sembunyikan.

  • Pengamatan melalui proses warisan. Jika variabel yang ingin Anda sembunyikan didefinisikan pada tingkat kelas, Anda dapat membayanginya melalui pewarisan dengan mendeklarasikannya kembali dengan kata kunci Bayangan di kelas turunan.

Dua Cara untuk Menyembunyikan Variabel

Untuk menyembunyikan variabel dengan membayanginya melalui batasan cakupan

  1. Tentukan wilayah yang menentukan variabel yang ingin Anda sembunyikan, dan tentukan subregion untuk menentukan ulang dengan variabel Anda.

    Wilayah variabel Subregion yang diperbolehkan untuk mendefinisikan ulang
    Modul Kelas dalam modul
    Kelas Subkelas dalam kelas

    Prosedur dalam kelas

    Anda tidak dapat mendefinisikan ulang variabel prosedur dalam satu blok di dalam prosedur tersebut, misalnya dalam konstruksi If...End If atau perulangan For.

  2. Buat subregion jika belum ada.

  3. Dalam subregion, tulis Pernyataan Dim yang mendeklarasikan variabel bayangan.

    Ketika kode di dalam subregion mengacu pada nama variabel, pengkompilasi menyelesaikan referensi ke variabel bayangan.

    Contoh berikut mengilustrasikan bayangan melalui cakupan, serta referensi yang melewati bayangan.

    Module shadowByScope
        ' The following statement declares num as a module-level variable.
        Public num As Integer
        Sub show()
            ' The following statement declares num as a local variable.
            Dim num As Integer
            ' The following statement sets the value of the local variable.
            num = 2
            ' The following statement displays the module-level variable.
            MsgBox(CStr(shadowByScope.num))
        End Sub
        Sub useModuleLevelNum()
            ' The following statement sets the value of the module-level variable.
            num = 1
            show()
        End Sub
    End Module
    

    Contoh sebelumnya mendeklarasikan variabel num baik pada tingkat modul maupun pada tingkat prosedur (dalam prosedur show). Variabel lokal num mengaburkan variabel num tingkat modul dalam show, sehingga variabel lokal diatur menjadi 2. Namun, tidak ada variabel lokal untuk membayangi num dalam prosedur useModuleLevelNum. Oleh karena itu, useModuleLevelNum mengatur nilai variabel tingkat modul ke 1.

    Panggilan MsgBox di dalam show melewati mekanisme bayangan dengan menentukan num menggunakan nama modul. Oleh karena itu, ini menampilkan variabel tingkat modul alih-alih variabel lokal.

Untuk menyembunyikan variabel dengan menutupi melalui pewarisan

  1. Pastikan variabel yang ingin Anda sembunyikan dideklarasikan dalam kelas, dan pada tingkat kelas (di luar prosedur apa pun). Jika tidak, Anda tidak dapat mengikutinya melalui pewarisan.

  2. Tentukan kelas yang berasal dari kelas variabel jika belum ada.

  3. Di dalam kelas turunan, tulis pernyataan yang Dim menyatakan variabel Anda. Sertakan kata kunci Bayangan dalam deklarasi.

    Ketika kode di kelas turunan mengacu pada nama variabel, pengkompilasi menyelesaikan referensi ke variabel Anda.

    Contoh berikut mengilustrasikan bayangan melalui pewarisan. Ini membuat dua referensi, satu yang mengakses variabel bayangan dan satu yang melewati bayangan.

    Public Class shadowBaseClass
        Public shadowString As String = "This is the base class string."
    End Class
    Public Class shadowDerivedClass
        Inherits shadowBaseClass
        Public Shadows shadowString As String = "This is the derived class string."
        Public Sub showStrings()
            Dim s As String = "Unqualified shadowString: " & shadowString &
                 vbCrLf & "MyBase.shadowString: " & MyBase.shadowString
            MsgBox(s)
        End Sub
    End Class
    

    Contoh sebelumnya mendeklarasikan variabel shadowString di kelas dasar dan membayanginya di kelas turunan. Prosedur showStrings di kelas turunan menampilkan versi bayangan string ketika nama shadowString tidak memenuhi syarat. Kemudian menampilkan versi bayangan ketika shadowString memenuhi syarat dengan MyBase kata kunci.

Pemrograman yang Kuat

Shadowing memperkenalkan lebih dari satu versi variabel dengan nama yang sama. Ketika pernyataan kode mengacu pada nama variabel, versi tempat pengkompilasi menyelesaikan referensi tergantung pada faktor-faktor seperti lokasi pernyataan kode dan keberadaan string yang memenuhi syarat. Ini dapat meningkatkan risiko merujuk pada versi yang tidak diinginkan dari variabel yang tertutupi. Anda dapat menurunkan risiko tersebut dengan sepenuhnya memenuhi syarat semua referensi ke variabel yang di bayangan.

Lihat juga