Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.