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 elemen Shared 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 menjadi Shared, 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 kelas ShareTotal dan tidak menggunakan instans apa pun. Dalam kasus panggilan yang ditujukan ke prosedur ReturnClass, ini berarti bahkan tidak menghasilkan panggilan ke ReturnClass, sehingga tindakan tambahan menampilkan "Function ReturnClass() called" tidak dilakukan.

Pengubah Shared dapat digunakan dalam konteks ini:

Lihat juga