Visual Basic'te prosedürler içindeki değişkenler genellikle çağrının tamamlanmasından sonra değerlerini kaybeder. Static anahtar kelimesi değişkenin prosedür çağrıları arasında değerini saklamasına olanak tanır.
Soru Tarihi:
Klasik Visual Basic (VB6) ve VB.NET'te Static genellikle sınıf veya modül alanları kullanmadan sayaçlar ve bayraklar oluşturmak için kullanıldı.
Sorun:
Geliştirici, sıradan yerel değişkenleri kullanarak onların "kalıcılığını" bekleyebilirken, her çağrıda sıfırlanır. Diğer yandan, statik değişken için seçilen yer (prosedürün gövdesi veya kod bloğu) hatalı olabilir.
Çözüm:
Değişkeni prosedür içinde Static ile tanımlayın. İlk prosedür çağrısında bir kez başlatılır, ardından çağrılar arasında değerini saklar.
Kod örneği:
Sub CountCalls() Static counter As Integer = 0 counter += 1 Console.WriteLine($"Çağrı numarası: {counter}") End Sub ' Çağrılar farklı değerler döndürecektir CountCalls() ' 1 CountCalls() ' 2 CountCalls() ' 3
Anahtar özellikler:
Static değişken yalnızca prosedürün görünürlük alanında vardır, ancak çağrılar arasında değer saklarStatic'in prosedürde Shared değişken ile farkı nedir?
Static değişken bu prosedürde geçerlidir — her yöntem örneği kendi bağımsız statik değişkenine sahiptir. Shared sınıf değişkeni tüm sınıf için tektir.
For veya If bloğunda Static değişken tanımlanabilir mi?
Hayır, Static değişkenler yalnızca prosedürün en üst seviyesinde tanımlanabilir, iç içe bloklar içinde (For, If) tanımlanamaz.
Birden fazla iş parçacığından Static prosedürü çağrıldığında ne olur?
VB.NET sürümünde Static değişkenlerin alanı her iş parçacığına bağlıdır, bu da yarış koşulu (race condition) ve çoklu iş parçacıklı çağrılarda beklenmeyen değerler yaratabilir.
Kullanıcı tepkisini hesaplamak için basma işlemi prosedüründe zaman kaydını tutmak için Static kullanılıyor, ancak birden fazla kullanıcının eşzamanlı basmalarını göz önünde bulundurmuyor (örneğin, web uygulaması veya çoklu iş parçacıklı pencere).
Artılar:
Eksiler:
Eş zamanlı olarak yalnızca bir iş parçacığından çağrılan yardımcı bir metodun içindeki çağrı sayacını saklamak için Static kullanılır.
Artılar:
Eksiler: