Aracılığıyla paylaş


Shared (Visual Basic)

Bildirilen bir veya daha fazla programlama öğesinin, sınıfın veya yapının belirli bir örneğiyle değil, büyük bir sınıf veya yapıyla ilişkilendirildiğini belirtir.

Paylaşılan Ne Zaman Kullanılır?

Bir sınıfın veya yapının üyesinin paylaşılması, her örneğin kendi kopyasını tuttuğu paylaşılmaması yerine her örneğin kullanımına sunulmasını sağlar. Paylaşım, örneğin bir değişkenin değeri uygulamanın tamamı için geçerliyse yararlıdır. Bu değişkeni Sharedolarak bildirirseniz, tüm örnekler aynı depolama konumuna erişer ve bir örnek değişkenin değerini değiştirirse tüm örnekler güncelleştirilmiş değere erişer.

Paylaşım, üyenin erişim düzeyini değiştirmez. Örneğin, bir sınıf üyesi paylaşılabilir ve özel olabilir (yalnızca sınıfın içinden erişilebilir) veya paylaşılmayan ve genel. Daha fazla bilgi için bkz . Visual Basic'te erişim düzeyleri.

Kurallar

  • Bildirim Bağlamı. Yalnızca modül düzeyinde kullanabilirsiniz Shared . Bu, bir Shared öğenin bildirim bağlamının bir sınıf veya yapı olması gerektiği ve kaynak dosya, ad alanı veya yordam olamayacağı anlamına gelir.

  • Birleşik Değiştiriciler. Aynı bildirimde Geçersiz Kılmalar, Geçersiz Kılınabilir, NotOverridable, MustOverride veya Static ile birlikte belirtemezsinizShared.

  • Erişme. Paylaşılan bir öğeye, sınıfının veya yapısının belirli bir örneğinin değişken adıyla değil, sınıf veya yapı adıyla niteleyerek erişebilirsiniz. Paylaşılan üyelerine erişmek için bir sınıfın veya yapının örneğini oluşturmanız bile gerekmez.

    Aşağıdaki örnek, yapısı tarafından Double kullanıma sunulan paylaşılan yordamı IsNaN çağırır.

    If Double.IsNaN(result) Then Console.WriteLine("Result is mathematically undefined.")
    
  • Örtük paylaşım. Değiştiriciyi Shared const deyiminde kullanamazsınız, ancak sabitler örtük olarak paylaşılır. Benzer şekilde, bir modülün veya arabirimin üyesini olarak Sharedbildiremezsiniz, ancak bunlar örtük olarak paylaşılır.

Davranış

  • Depolama. Paylaşılan değişken veya olay, sınıfı veya yapısından kaç veya daha az örnek oluşturursanız oluşturun yalnızca bir kez bellekte depolanır. Benzer şekilde, paylaşılan bir yordam veya özellik yalnızca bir yerel değişken kümesini barındırıyor.

  • Örnek Değişkeni üzerinden erişme. Paylaşılan bir öğeye, sınıfının veya yapısının belirli bir örneğini içeren bir değişkenin adıyla niteleyerek erişmek mümkündür. Bu genellikle beklendiği gibi çalışsa da, derleyici bir uyarı iletisi oluşturur ve değişkeni yerine sınıf veya yapı adı üzerinden erişim yapar.

  • Örnek İfadesi üzerinden erişme. Paylaşılan bir öğeye sınıfının veya yapısının bir örneğini döndüren bir ifade aracılığıyla erişiyorsanız, derleyici ifadeyi değerlendirmek yerine sınıf veya yapı adı üzerinden erişim yapar. İfadenin diğer eylemleri gerçekleştirmesini ve örneği döndürmesini amaçladıysanız bu erişim beklenmeyen sonuçlar üretir. Aşağıdaki örnekte bu durum gösterilmektedir.

    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
    

    Yukarıdaki örnekte derleyici, kod paylaşılan özelliğe Total bir örnek üzerinden her iki kez eriştiğinde bir uyarı iletisi oluşturur. Her durumda, doğrudan sınıfı ShareTotal üzerinden erişim yapar ve herhangi bir örneği kullanmaz. yordamına ReturnClassyönelik istenen çağrı söz konusu olduğunda, bunun için bir çağrı ReturnClassbile oluşturmadığı anlamına gelir, bu nedenle "Function ReturnClass() çağrılır" ek eylemi gerçekleştirilmez.

Değiştirici Shared şu bağlamlarda kullanılabilir:

Ayrıca bkz.