Bersama (Visual Basic)
Menentukan bahwa satu atau lebih elemen pemrograman yang dideklarasikan dikaitkan dengan kelas atau struktur pada umumnya, dan bukan dengan instans tertentu dari kelas atau struktur.
Kapan Menggunakan Bersama
Memakai bersama anggota kelas atau struktur membuatnya tersedia untuk setiap instans, daripada non-bersama, yang setiap instans menyimpan salinannya sendiri. Memakai bersama berguna, misalnya, jika nilai variabel berlaku untuk seluruh aplikasi. Jika Anda mendeklarasikan variabel tersebut menjadi Shared
, maka semua instans mengakses lokasi penyimpanan yang sama, dan jika satu instans mengubah nilai variabel, semua instans mengakses nilai yang diperbarui.
Memakai bersama tidak mengubah tingkat akses anggota. Misalnya, anggota kelas dapat dipakai bersama dan privat (hanya dapat diakses dari dalam kelas), atau non-bersama dan publik. Untuk informasi selengkapnya, lihat Tingkat akses di Visual Basic.
Aturan
Konteks Deklarasi. Anda dapat menggunakan
Shared
hanya pada tingkat modul. Ini berarti konteks deklarasi untuk elemenShared
harus berupa kelas atau struktur, dan tidak boleh berupa file sumber, namespace, struktur, atau prosedur.Pengubah Gabungan. Anda tidak dapat menentukan
Shared
bersama dengan Overrides, Overridable, NotOverridable, MustOverride, atau Static dalam deklarasi yang sama.Mengakses. Anda mengakses elemen bersama dengan memenuhi syarat dengan nama kelas atau strukturnya, bukan dengan nama variabel dari instance tertentu dari kelas atau strukturnya. Anda bahkan tidak perlu membuat instance kelas atau struktur untuk mengakses anggota bersamanya.
Contoh berikut memanggil prosedur bersama IsNaN yang diekspos oleh struktur Double.
If Double.IsNaN(result) Then Console.WriteLine("Result is mathematically undefined.")
Memakai Bersama Implisit. Anda tidak dapat menggunakan pengubah
Shared
dalam Pernyataan Const, tetapi konstanta dibagikan secara implisit. Demikian pula, Anda tidak dapat mendeklarasikan anggota modul atau antarmuka menjadiShared
, tetapi itu dibagikan secara implisit.
Perilaku
Penyimpanan. Variabel atau peristiwa bersama disimpan dalam memori hanya sekali, tidak peduli banyak atau sedikit instans yang Anda buat dari kelas atau strukturnya. Demikian pula, prosedur bersama atau properti hanya menyimpan satu set variabel lokal.
Mengakses melalui Variabel Instans. Dimungkinkan untuk mengakses elemen bersama dengan mengualifikasikannya dengan nama variabel yang berisi instance tertentu dari kelas atau strukturnya. Meskipun ini biasanya berfungsi seperti yang diharapkan, kompiler menghasilkan pesan peringatan dan membuat akses melalui kelas atau nama struktur alih-alih variabel.
Mengakses melalui Ekspresi Instans. Jika Anda mengakses elemen bersama melalui ekspresi yang mengembalikan instance kelas atau strukturnya, kompiler membuat akses melalui nama kelas atau struktur alih-alih mengevaluasi ekspresi. Akses ini mengeluakan hasil yang tidak terduga jika Anda bermaksud membuat ekspresi melakukan tindakan lain selain mengembalikan instans. Contoh berikut mengilustrasikan situasi ini.
Sub Main() ' The following line is the preferred way to access Total. ShareTotal.Total = 10 ' The following line generates a compiler warning message and ' accesses total through class ShareTotal instead of through ' the variable instanceVar. This works as expected and adds ' 100 to Total. Dim instanceVar As New ShareTotal instanceVar.Total += 100 ' The following line generates a compiler warning message and ' accesses total through class ShareTotal instead of calling ' ReturnClass(). This adds 1000 to total but does not work as ' expected, because the WriteLine in ReturnClass() does not run. Console.WriteLine("Value of total is " & CStr(ShareTotal.Total)) ReturnClass().Total += 1000 End Sub Public Function ReturnClass() As ShareTotal Console.WriteLine("Function ReturnClass() called") Return New ShareTotal End Function Public Class ShareTotal Public Shared Property Total As Integer End Class
Dalam contoh sebelumnya, kompiler menghasilkan pesan peringatan dua kali kode mengakses properti bersama
Total
melalui instans. Dalam setiap kasus, ini membuat akses langsung melalui kelasShareTotal
dan tidak menggunakan instans apa pun. Dalam kasus panggilan yang ditujukan ke prosedurReturnClass
, ini berarti bahkan tidak menghasilkan panggilan keReturnClass
, sehingga tindakan tambahan menampilkan "Function ReturnClass() called" tidak dilakukan.
Pengubah Shared
dapat digunakan dalam konteks ini:
- Pernyataan Dim (Redup)
- Pernyataan Event (Peristiwa)
- Pernyataan Function (Fungsi)
- Pernyataan Operator
- Pernyataan Properti
- Sub Pernyataan