C# Static Nedir? Nasıl Kullanılır?

Programlamada static kavramı nedir ve nasıl kullanılmalıdır gibi sorulara cevap verebilmek önemlidir. Öncelikle static kelimesini programlama alanında duyduğumuzda aklımıza doğrudan "sadece bir tane olan, değişmeyen, sabit" gibi çağrışımlar gelmelidir.

Örneğin, bir sınıfta static olarak tanımlanmış bir metota hiç bir zaman o sınıftan oluşturulan nesne üzerinden ulaşmamız mümkün değildir. Bu static metota ancak sınıfın kendisi üzerinden ulaşabilir ve kullanabiliriz. 

Aynı şekilde static olarak bir tanımlanmış bir sınıftan nesne üretemeyiz. O sınıfı sadece içindeki metotlara doğrudan kendisi üzerinden erişebilir ve kullanabiliriz. Örneğin:


static class Ekran
{	
	public static void yaz(string yazi)
	{
		Console.WriteLine(yazi);
	}
}
					
public class Program
{
	public static void Main()
	{
		Ekran.yaz("merhaba dünya");
	}
}
static olarak tanımlanmış bir sınıftan yanda olduğu gibi Ekran ekran1 = new Ekran() şeklinde nesne üretemeyiz, çünkü sınıf static bir sınıftır. Aynı zamanda bu static sınıf içinde tanımlanan metot aynı şekilde static olarak tanımlanmalıdır. Zaten o static olarak tanımlanmazsa şu şekilde hata alınacaktır: cannot declare instance members in a static class.

Bir diğer bilinmesi gereken husus ise const tanımlı değişkenler. Bu şekilde tanımlı değişkenler adının tersine sabit değerli değişkenlerdir ve değişmezler. Yani const tanımlı olan değişken static olarak belirtilmese bile default yani varsayılan olarak static tanımlıdır. Kısacası const değişkenler aynı zamanda static olmaktadır.

Sıra static constructor'a geldi. Static kurucular sadece bir kez çalıştırılır, sınıfta sadece bir static constructor olabilir, ayrıca parametre almazlar, ayrıca erişim belirteçleri ile birlikte tanımlanamazlar aksi takdirde: access modifiers are not allowed on static constructors şeklinde hata verecektir. Sınıf içinde çalışan ilk metot her zaman kendisidir. Kullanım sebebi ise anladığım kadarıyla static sınıf üyelerini en başta başlatmak. Bunu public constructor içerisinde de yapabiliriz ancak o zaman her nesne oluşturmada mecburen static üyelere de tekrar tekrar set metotu uygulanmış olacak. Bir sınıfta static constructor ile beraber aynı zamanda public constructor da tanımlayabiliriz.
using System;

class Uye
{	
	public static int UyeSayisi {get; set;}
	public string ad;
	public int yas;
	
	static Uye() 
	{
		Console.WriteLine("static constructor çalıştı");
		UyeSayisi = 0;
	}
	
	public Uye(string adi, int yasi)
	{
		Console.WriteLine("public constructor çalıştı");
		UyeSayisi++;
		ad = adi;
		yas = yasi;
	}
}
					
public class Program
{
	public static void Main()
	{
		Uye u1 = new Uye("Ahmet", 45);
		Uye u2 = new Uye("Mehmet", 34);
		Uye u3 = new Uye("Ali", 67);
		
		Console.WriteLine(Uye.UyeSayisi);
	}
}
Yukarıdaki kodu iyice inceleyin. Programı çalıştırdığımızda çıktı olarak aşağıdaki sonuçları elde ederiz:
static constructor çalıştı
public constructor çalıştı
public constructor çalıştı
public constructor çalıştı
3
static constructor bir kez çalıştığı görülecektir. Aynı zamanda static olarak tanımlanmış sınıf üyesi birden fazla nesne oluşumuna bağlı şekilde sıfırlanmamaktadır, hatta bu sayede kaç tane nesne oluşturulmuş, gerekli miktarı içinde depolayabiliriz.

Hiç yorum yok:

Yorum Gönder