18 Mayıs 2015

C#'ta static nedir ne işe yarar?

   Static olmayan c# elemanlarına Instance deriz. Yani türkçe karşılığı ile örnek deriz. Peki nedir bu instance üyeler.
   Instance elemanlar için her seferinde yeni bir örnek oluşturmamız gerekir. Ve her bir örnek üzerinde istediğimiz değişikliği yapabiliriz. Yani instance elemanlardan istediğimiz kadar örnek oluşturabiliriz.

   Static ise tam tersi olup o elemandan en fazla bir tane örnek üretilmesine izin verir. Bu yüzden sadece onun üzerinde işlem yapabiliriz.Bir başka deyişle yaratılan her static eleman herhangi bir örnek uzayda aynı elemandır.
  Aşağıda bir örnekle açıklayalım.
  1. Bunun için önce bir konsol projesi açalım.
  2. Burada aşağıdaki gibi bir class oluşturalım
 public class Eleman
    {
        public string Ad; // Instance field
        public static int ElemanSayisi; // Static field
        public Eleman(string n) // Constructor
        {
            Ad= n; // Assign the instance field
            ElemanSayisi= ElemanSayisi+ 1; // static ElemanSayisi artıyor.
        }
    }
      Burada dikkat ederseniz üretilen her örnek Eleman class için static olan Eleman sayısı artacaktır.
    3.Aşağıdaki programımızı yazalım.
Eleman p1 = new Eleman("Ali");
            Eleman p2 = new Eleman("Ayşe");
            Eleman p3 = new Eleman("Mehmet");
            Console.WriteLine(p1.Ad); // Ali
            Console.WriteLine(p2.Ad); // Ayşe
            Console.WriteLine(p3.Ad);// Mehmet
            Console.WriteLine(Eleman.ElemanSayisi); // 3
            Console.ReadKey();
Burada dikkat ederseniz Ali,Ayşe ve Mehmet adında üç örnek class oluşturduk. Ve her biri için kaydedilen isim ayrıdır. Fakat static olan eleman sayısı hepsi için tek olacaktır. Static olduğu için  örnek uzayda Eleman sayısını çekemeyiz.Örneğin "p1.ElemanSayisi" adında bir eleman çekemezsiniz. Çünkü static türler her bir eleman için ayrı ayrı üretilemez. O yüzden ClasAdı.StaticEleman formatında çekebiliriz.
Bu yüzden Eleman.ElemanSayisi şeklinde çekilmiş olduğuna dikkat ediniz.
Sizde isterseniz yeni isimler ekleyerek ya da silerek ElemanSayisi üzerindeki değişiklikleri inceleyebilirsiniz.

Kaynak: C# 5.0 in a Nutshell