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 ve Loop

  • For [Each] ve Next

  • If ve End If

  • Select ve End Select

  • SyncLock ve End SyncLock

  • Try ve End Try

  • While ve End While

  • With ve End 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 Ifarası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 strMsgbaş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ı intTempbir değişken içeren birkaç farklı yordam oluşturabilirsiniz. Her intTemp biri yerel değişken olarak bildirilirse, her yordam yalnızca kendi sürümünü intTemptanır. Herhangi bir yordam, diğer yordamlardaki değişkenleri etkilemeden intTemp yerel intTemp 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şkenlerinden Shared 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.

Ayrıca bkz.