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.
Menentukan bahwa satu atau beberapa elemen pemrograman yang dideklarasikan dikaitkan dengan kelas atau struktur pada umumnya, dan bukan dengan instans kelas atau struktur tertentu.
Kapan Menggunakan Bersama
Berbagi anggota kelas atau struktur membuatnya tersedia untuk setiap instans, bukan non-bersama, di mana setiap instans menyimpan salinannya sendiri. Berbagi 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.
Berbagi tidak mengubah tingkat akses anggota. Misalnya, anggota kelas dapat dibagikan 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 hanya dapat menggunakan
Sharedpada tingkat modul. Ini berarti konteks deklarasi untukSharedelemen harus merupakan kelas atau struktur, dan tidak dapat menjadi file sumber, namespace, atau prosedur.Pengubah Gabungan. Anda tidak dapat menentukan
Sharedbersama dengan Penimpaan, Dapat Diganti, Tidak Dapat Diganti, MustOverride, atau Statis dalam deklarasi yang sama.Mengakses. Anda mengakses elemen bersama dengan memenuhi syarat dengan nama kelas atau strukturnya, bukan dengan nama variabel instans tertentu dari kelas atau strukturnya. Anda bahkan tidak perlu membuat instans kelas atau struktur untuk mengakses anggota bersamanya.
Contoh berikut memanggil prosedur IsNaN bersama yang diekspos oleh Double struktur.
If Double.IsNaN(result) Then Console.WriteLine("Result is mathematically undefined.")Berbagi Implisit. Anda tidak dapat menggunakan pengubah
Shareddalam Pernyataan Const, tetapi konstanta dibagikan secara implisit. Demikian pula, Anda tidak dapat menyatakan anggota modul atau antarmuka menjadiShared, tetapi mereka dibagikan secara implisit.
Perilaku
Penyimpanan. Variabel atau peristiwa bersama disimpan dalam memori hanya sekali, tidak peduli berapa banyak atau beberapa instans yang Anda buat dari kelas atau strukturnya. Demikian pula, prosedur atau properti bersama hanya menyimpan satu set variabel lokal.
Mengakses melalui Variabel Instans. Dimungkinkan untuk mengakses elemen bersama dengan memenuhi syarat dengan nama variabel yang berisi instans tertentu dari kelas atau strukturnya. Meskipun ini biasanya berfungsi seperti yang diharapkan, pengkompilasi 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 instans kelas atau strukturnya, pengkompilasi membuat akses melalui nama kelas atau struktur alih-alih mengevaluasi ekspresi. Akses ini menghasilkan hasil yang tidak terduga jika Anda ingin ekspresi melakukan tindakan lain serta 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 ClassDalam contoh sebelumnya, pengkompilasi menghasilkan pesan peringatan kedua kali kode mengakses properti
Totalbersama melalui instans. Dalam setiap kasus, ini membuat akses langsung melalui kelasShareTotaldan tidak menggunakan instans apa pun. Dalam kasus panggilan yang dimaksudkan ke prosedurReturnClass, ini berarti ia bahkan tidak menghasilkan panggilan keReturnClass, sehingga tindakan tambahan menampilkan "Function ReturnClass() yang disebut" tidak dilakukan.
Pengubah Shared dapat digunakan dalam konteks ini:
- Pernyataan Dim
- Pernyataan Peristiwa
- Pernyataan Fungsi
- Pernyataan Operator
- Pernyataan Properti
- Sub Pernyataan