Bagikan melalui


Promosi Jenis (Visual Basic)

Saat Anda mendeklarasikan elemen pemrograman dalam modul, Visual Basic mempromosikan cakupannya ke namespace yang berisi modul. Ini dikenal sebagai promosi tipe.

Contoh berikut menunjukkan definisi kerangka modul dan dua anggota modul tersebut.

Namespace projNamespace
    Module projModule
        Public Enum basicEnum As Integer
            one = 1
            two = 2
        End Enum
        Public Class innerClass
            Shared Sub numberSub(ByVal firstArg As Integer)
            End Sub
        End Class
    End Module
End Namespace

Dalam projModule, elemen pemrograman yang dideklarasikan pada tingkat modul dipromosikan ke projNamespace. Dalam contoh sebelumnya, basicEnum dan innerClass dipromosikan, tetapi numberSub tidak, karena tidak dideklarasikan pada tingkat modul.

Pengaruh Jenis Promosi

Efek dari jenis promosi adalah bahwa string kualifikasi tidak perlu menyertakan nama modul. Contoh berikut melakukan dua panggilan ke prosedur dalam contoh sebelumnya.

Sub usePromotion()
    projNamespace.projModule.innerClass.numberSub(projNamespace.projModule.basicEnum.one)
    projNamespace.innerClass.numberSub(projNamespace.basicEnum.two)
End Sub

Dalam contoh sebelumnya, panggilan pertama menggunakan string kualifikasi lengkap. Namun, ini tidak perlu karena promosi jenis. Panggilan kedua juga mengakses anggota modul tanpa menyertakan projModule dalam string kualifikasi.

Kekalahan Jenis Promosi

Jika namespace sudah memiliki anggota dengan nama yang sama dengan anggota modul, promosi tipe gagal untuk anggota modul tersebut. Contoh berikut menunjukkan definisi kerangka enumerasi dan modul dalam namespace yang sama.

Namespace thisNamespace
    Public Enum abc
        first = 1
        second
    End Enum
    Module thisModule
        Public Class abc
            Public Sub abcSub()
            End Sub
        End Class
        Public Class xyz
            Public Sub xyzSub()
            End Sub
        End Class
    End Module
End Namespace

Dalam contoh sebelumnya, Visual Basic tidak dapat mempromosikan kelas abcthisNameSpace karena sudah ada enumerasi dengan nama yang sama di tingkat namespace. Untuk mengakses abcSub, Anda harus menggunakan string penuh kualifikasi thisNamespace.thisModule.abc.abcSub. Namun, kelas xyz masih dianjurkan, dan Anda dapat mengakses xyzSub dengan kualifikasi yang lebih ringkas thisNamespace.xyz.xyzSub.

Penghalangan Promosi Tipe untuk Tipe Parsial

Jika kelas atau struktur di dalam modul menggunakan kata kunci Parsial , promosi jenis secara otomatis dikalahkan untuk kelas atau struktur tersebut, apakah namespace memiliki anggota dengan nama yang sama atau tidak. Elemen lain dalam modul masih memenuhi syarat untuk promosi jenis.

Konsekuensi. Kekalahan jenis promosi definisi parsial dapat menyebabkan hasil yang tidak terduga dan bahkan kesalahan pengkompilasi. Contoh berikut menunjukkan definisi parsial kerangka kelas, salah satunya berada di dalam modul.

Namespace sampleNamespace
    Partial Public Class sampleClass
        Public Sub sub1()
        End Sub
    End Class
    Module sampleModule
        Partial Public Class sampleClass
            Public Sub sub2()
            End Sub
        End Class
    End Module
End Namespace

Dalam contoh sebelumnya, pengembang mungkin mengharapkan pengkompilasi untuk menggabungkan dua definisi parsial dari sampleClass. Namun, kompiler tidak mempertimbangkan promosi untuk definisi parsial dalam sampleModule. Akibatnya, ia mencoba untuk mengkompilasi dua kelas terpisah dan berbeda, keduanya dinamai sampleClass tetapi dengan jalur kualifikasi yang berbeda.

Pengkompilasi menggabungkan definisi parsial hanya ketika jalur yang sepenuhnya memenuhi syarat identik.

Rekomendasi

Rekomendasi berikut mewakili praktik pemrograman yang baik.

  • Nama Unik. Ketika Anda memiliki kontrol penuh atas penamaan elemen pemrograman, selalu merupakan ide yang baik untuk menggunakan nama unik di mana-mana. Nama yang identik memerlukan kualifikasi ekstra dan dapat membuat kode Anda lebih sulit dibaca. Mereka juga dapat menyebabkan kesalahan halus dan hasil yang tidak terduga.

  • Kualifikasi Lengkap. Ketika Anda bekerja dengan modul dan elemen lain di namespace yang sama, pendekatan paling aman adalah selalu menggunakan kualifikasi penuh untuk semua elemen pemrograman. Jika promosi tipe gagal untuk anggota modul dan Anda tidak sepenuhnya memenuhi kualifikasi anggota tersebut, Anda dapat secara tidak sengaja mengakses elemen pemrograman yang berbeda.

Lihat juga