Değişkenlerin Yaşam Alanları

C# dilinde programın genel akışı açılan ve kapanan parantezler içerisinde yazılmasıdır. Bu açılan ve kapanan parantezler arasındaki bölgeye blok ,bu kavrama değişkenlerin kapsam alanı (Scope) denir.


Uygulamanın çalışması değişkenlerin kapsam alanlarındayken, bu değişkenler bellekte tutulur. Dolayısıyla değişkenlerin tanımlandıkları yer, kullanılacağı amaca göre seçilmelidir. Örneğin bir değişken birden fazla yordamda kullanılacaksa, bir üst düzeyde (Class düzeyinde) tanımlanmaları gerekir. Ancak sadece bir yordam içinde kullanılan değişkenler class düzeyinde tanımlanırsa, fazladan bellekte yer tutar ve performans düşer. Class seviyesindeki değişkenler, aynı class içindeli fonksiyonlar ile değiştirilebilir ve class örneğinin yaşam süresinde ilgili özelliklerine erişim sağlanabilir.

public class deneme
{
public static void Form()
{
{

//Birinci blokint a=20 ;

}
{
//İkinci blokint a=20 ;
}
}
}

Aşağıdaki kısa örnekte tanımlanan örnekte her iki “a” değişkeni birbirinden bağımsızdır ve bellekte ayrı bölgelerde saklanırlar

Yukarıdaki örnekte birinci ve ikinci blokta tanımlanan “a” isimli değişkenler Form bloğu içinde geçersizdir. Birinci a değişkeninin faaliyet alanı 1.Blok ,ikinci a değişkenin faaliyet alanı ise 2. Bloktur. For ve diğer döngüler de birer blok olduğu için bu bloklarda tanımlanan değişkenler döngü bloğunun dışında geçersiz olacaktır.

Diğer bir önemli nokta ise faaliyet alanı devam eden bir değişkenin bir daha tanımlanmasının hataya yol açmasıdır. Örneğin aşağıdaki gibi bir durum derleme zamanında hata verecektir. Çünkü bir değişkenin faaliyet alanı bitmeden aynı isimli değişken tekrar tanımlanıyor.

public class Deneme
{
public static void Form()
{
int a;
{
int a=20 ;
}
}
}

Gördüğünüz gibi Form bloğunda tanımlanan a değişkeninin faaliyet alanı açılan blokta devam etmektedir.Bu yüzden yukarıdaki gibi ifadeler geçersidir.Üst seviyede açılan bloklar alt seviyedeki blokları kapsadığı için, birinci tanımlanan a değişkeni sonradan açılan blok içinde hala geçerlidir.

Yukarıda anlatılan duruma ters düşüyor gibi görünse de aşağıdaki gibi bir kullanım son derece geçerli bir durumdur.

public class Deneme

{ static int a = 10; = public static void Form()

{
int a;
{
int a = 10 ;
}
}
}