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 Shared
olarak 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, birShared
öğ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 belirtemezsiniz
Shared
.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 olarakShared
bildiremezsiniz, 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ınaReturnClass
yönelik istenen çağrı söz konusu olduğunda, bunun için bir çağrıReturnClass
bile 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: