Visual Basic'de Kapsam
Bildirilen öğenin kapsamı, adını nitelemeden veya İçeri Aktarma Deyimi (.NET Ad Alanı ve Türü) aracılığıyla kullanılabilir hale getirmeden ona başvurabilen tüm kod kümesidir. Bir öğenin kapsamı aşağıdaki düzeylerden birinde olabilir:
Level | Açıklama |
---|---|
Blok kapsamı | Yalnızca bildirildiği kod bloğu içinde kullanılabilir |
Yordam kapsamı | Bildirildiği yordam içindeki tüm kodlar için kullanılabilir |
Modül kapsamı | Bildirildiği modül, sınıf veya yapı içindeki tüm kodlar için kullanılabilir |
Ad alanı kapsamı | Bildirildiği ad alanında tüm kodlar için kullanılabilir |
Bu kapsam ilerleme düzeyleri en dardan (blok) en genişe (ad alanı) kadardır; en dar kapsam , niteleme olmadan öğeye başvurabilen en küçük kod kümesi anlamına gelir. Daha fazla bilgi için bu sayfadaki "Kapsam Düzeyleri" bölümüne bakın.
Kapsam Belirtme ve Değişkenleri Tanımlama
Bir öğenin kapsamını bildirirken belirtirsiniz. Kapsam aşağıdaki faktörlere bağlı olabilir:
öğesini bildirdiğiniz bölge (blok, yordam, modül, sınıf veya yapı)
Öğesinin bildirimini içeren ad alanı
öğesi için bildirdiğiniz erişim düzeyi
Aynı ada ancak farklı kapsama sahip değişkenler tanımlarken dikkatli olun çünkü bunu yapmak beklenmeyen sonuçlara yol açabilir. Daha fazla bilgi için bkz . Bildirilen Öğelere Başvurular.
Kapsam Düzeyleri
Bir programlama öğesi, içinde bildirdiğiniz bölge genelinde kullanılabilir. Aynı bölgedeki tüm kod, adını nitelemeden öğeye başvurabilir.
Blok Kapsamı
Blok, aşağıdaki gibi bildirim deyimlerini başlatma ve sonlandırma içine alınmış bir deyim kümesidir:
Do
veLoop
For
[Each
] veNext
If
veEnd If
Select
veEnd Select
SyncLock
veEnd SyncLock
Try
veEnd Try
While
veEnd While
With
veEnd With
Bir blok içinde bir değişken bildirirseniz, bunu yalnızca bu blok içinde kullanabilirsiniz. Aşağıdaki örnekte, tamsayı değişkeninin cube
kapsamı ile End If
arasındaki If
blok olur ve yürütme bloğun dışına çıktığında artık başvuramayasınızcube
.
If n < 1291 Then
Dim cube As Integer
cube = n ^ 3
End If
Not
Bir değişkenin kapsamı bir blokla sınırlı olsa bile, yaşam süresi hala tüm yordamın ömrüdür. Yordam sırasında bloğu birden çok kez girerseniz, her blok değişkeni önceki değerini korur. Böyle bir durumda beklenmeyen sonuçlardan kaçınmak için bloğun başında blok değişkenlerini başlatmak akıllıca olacaktır.
Yordam Kapsamı
Yordam içinde bildirilen bir öğe, bu yordamın dışında kullanılamaz. Yalnızca bildirimi içeren yordam bunu kullanabilir. Bu düzeydeki değişkenler yerel değişkenler olarak da bilinir. Bunları Static anahtar sözcüğüyle veya olmadan Dim Deyimi ile bildirirsiniz.
Yordam ve blok kapsamı yakından ilişkilidir. Bir yordamın içinde ancak bu yordamdaki herhangi bir bloğun dışında bir değişken bildirirseniz, değişkenin bloğun tüm yordam olduğu blok kapsamına sahip olduğunu düşünebilirsiniz.
Not
Değişken olsalar Static
bile tüm yerel öğeler, göründükleri yordama özeldir. Bir yordam içinde Public anahtar sözcüğünü kullanarak herhangi bir öğe bildiremezsiniz.
Modül Kapsamı
Kolaylık sağlamak için tek terimli modül düzeyi modüllere, sınıflara ve yapılara eşit şekilde uygulanır. Bildirim deyimini herhangi bir yordam veya bloğun dışına ancak modül, sınıf veya yapı içine yerleştirerek bu düzeyde öğeleri bildirebilirsiniz.
Modül düzeyinde bir bildirim yaptığınızda, kapsamı seçtiğiniz erişim düzeyi belirler. Modülü, sınıfı veya yapıyı içeren ad alanı da kapsamı etkiler.
Özel erişim düzeyi bildirdiğiniz öğeler bu modüldeki her yordamda kullanılabilir, ancak farklı bir modüldeki kodlarda kullanılamaz. Dim
Herhangi bir erişim düzeyi anahtar sözcüğü kullanmazsanız, modül düzeyinde deyimi varsayılan olarak Private
kullanılır. Ancak, deyiminde anahtar sözcüğünü Dim
kullanarak Private
kapsam ve erişim düzeyini daha belirgin hale getirebilirsiniz.
Aşağıdaki örnekte, modülde tanımlanan tüm yordamlar dize değişkenine strMsg
başvurabilir. İkinci yordam çağrıldığında, dize değişkeninin strMsg
içeriğini bir iletişim kutusunda görüntüler.
' Put the following declaration at module level (not in any procedure).
Private strMsg As String
' Put the following Sub procedure in the same module.
Sub initializePrivateVariable()
strMsg = "This variable cannot be used outside this module."
End Sub
' Put the following Sub procedure in the same module.
Sub usePrivateVariable()
MsgBox(strMsg)
End Sub
Ad Alanı Kapsamı
Bir öğeyi Friend veya Public anahtar sözcüğünü kullanarak modül düzeyinde bildirirseniz, öğenin bildirildiği ad alanı genelindeki tüm yordamlar için kullanılabilir hale gelir. Önceki örnekte yapılan aşağıdaki değişiklikle, dize değişkenine strMsg
bildiriminin ad alanında herhangi bir yerde kod tarafından başvurulabilir.
' Include this declaration at module level (not inside any procedure).
Public strMsg As String
Ad alanı kapsamı iç içe ad alanlarını içerir. Bir ad alanının içinden kullanılabilen bir öğe, bu ad alanının içinde iç içe yerleştirilmiş herhangi bir ad alanının içinden de kullanılabilir.
Projeniz herhangi bir Ad Alanı Deyimiiçermiyorsa, projedeki her şey aynı ad alanındadır. Bu durumda, ad alanı kapsamı proje kapsamı olarak düşünülebilir. Public
modül, sınıf veya yapıdaki öğeler, projelerine başvuran tüm projelerde de kullanılabilir.
Kapsam Seçimi
Bir değişkeni bildirdiğinizde, kapsamını seçerken aşağıdaki noktaları göz önünde bulundurmanız gerekir.
Yerel Değişkenlerin Avantajları
Yerel değişkenler, aşağıdaki nedenlerle her tür geçici hesaplama için iyi bir seçimdir:
Ad Çakışması Önleme. Yerel değişken adları çakışmaya açık değildir. Örneğin, adlı
intTemp
bir değişken içeren birkaç farklı yordam oluşturabilirsiniz. HerintTemp
biri yerel değişken olarak bildirilirse, her yordam yalnızca kendi sürümünüintTemp
tanır. Herhangi bir yordam, diğer yordamlardaki değişkenleri etkilemedenintTemp
yerelintTemp
değerini değiştirebilir.Bellek Tüketimi. Yerel değişkenler yalnızca yordamları çalışırken bellek tüketir. Yordam çağıran koda geri döndüğünde bellekleri serbest bırakılır. Buna karşılık, Paylaşılan ve Statik değişkenler uygulamanız çalışmayı durdurana kadar bellek kaynaklarını kullanır, bu nedenle bunları yalnızca gerektiğinde kullanın. Örnek değişkenleri, örnekleri varolmaya devam ederken bellek tüketir ve bu da onları yerel değişkenlerden daha az, ancak veya
Static
değişkenlerindenShared
daha verimli hale getirir.
Kapsamı En Aza Indirme
Genel olarak, herhangi bir değişken veya sabit bildirilirken, kapsamı mümkün olduğunca dar yapmak iyi bir programlama uygulamasıdır (blok kapsamı en dardır). Bu, belleğin korunmasına yardımcı olur ve kodunuzun hatalı bir şekilde yanlış değişkene başvurma olasılığını en aza indirir. Benzer şekilde, bir değişkeni yalnızca yordam çağrıları arasında değerinin korunması gerektiğinde Statik olarak bildirmeniz gerekir.