Bagikan melalui


Bersama (Visual Basic)

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 Shared pada tingkat modul. Ini berarti konteks deklarasi untuk Shared elemen harus merupakan kelas atau struktur, dan tidak dapat menjadi file sumber, namespace, atau prosedur.

  • Pengubah Gabungan. Anda tidak dapat menentukan Shared bersama 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 Shared dalam Pernyataan Const, tetapi konstanta dibagikan secara implisit. Demikian pula, Anda tidak dapat menyatakan anggota modul atau antarmuka menjadi Shared, 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 Class
    

    Dalam contoh sebelumnya, pengkompilasi menghasilkan pesan peringatan kedua kali kode mengakses properti Total bersama melalui instans. Dalam setiap kasus, ini membuat akses langsung melalui kelas ShareTotal dan tidak menggunakan instans apa pun. Dalam kasus panggilan yang dimaksudkan ke prosedur ReturnClass, ini berarti ia bahkan tidak menghasilkan panggilan ke ReturnClass, sehingga tindakan tambahan menampilkan "Function ReturnClass() yang disebut" tidak dilakukan.

Pengubah Shared dapat digunakan dalam konteks ini:

Lihat juga