İstanbul'un en iyi web tasarım firması


C# Static Kavramı

Beli bir üyeyi referansta bulunmadan kendi başına çağırmak mümkündür. Bunu gerçekleştirebilmek için tanımlanacak olanın başına Static koymamız yeterlidir. Bir üyeyi static olarak tanımlandığımızda üyeyi kendi sınıfından örneklenmeye gerek kalmadan kullanabiliriz.

Staticler Belleğin stack veya heap bölgesinde olmayıp static bölgesinde ikamet ederler. Onun icin nesne örneklendiğinde değil de Sınıf ilk kullanıldığında belleğe çıkarlar.

- Static Metodlar (Static Methods)

 
Static olarak belirtiğimiz motodu kullanabilmemiz için tipin nesne örneğini oluşturmamıza gerek yoktur.
 
    class Aritmetik
    {
        public static int Topla(int a, int b)
        {
            return a + b;
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Aritmetik.Topla(4, 6));
 
        }
    }
 
Aritmetik bir sınıftır. Sınıfın içindeki metodu olduğu gibi çağırabiliyoruz. C#’da math bir static sınıfdır. Math. Dediğimizde intellisense math sınıfına ait bir çok metodu gösterir. Sınıfı örneklemeden math.round yapabiliyoruz.
 
 
- Static Fieldler
 

class Televizyon
    {
      public bool Renklimi;
      public string Marka;
      public static double fiyat;
    }
static void Main(string[] args)
    {
 
      Televizyon.fiyat;
 
    }
 
Görüldüğü gibi sınıf ismiyle fielde ulaşırız. Peki const ile farkı nedir diye sorarsak, Staticler değiştirebilinir, Const ‘ lar ise değikenleri değiştirelemezler.
 
Fiyatını değiştirelim
Televizyon.fiyat = 2300;
Console.WriteLine(Televizyon.fiyat);
 
 
Metotla Değişiklik

public class Televizyon
    {
      public bool Renklimi;
      public string Marka;
      public static double fiyat;
 
      public void degistir(double guncelle)
      {
          fiyat += guncelle;
      }
    }
 
static void Main(string[] args)
{
 
Televizyon t = new Televizyon();
t.degistir(700);
Console.WriteLine(Televizyon.fiyat);
}
 
Static üyeyi doğrudan değiştirmeyip, Metodlar sayesiyle değiştirdik.
 
Static bir değişkene ilk değeri,  program başladığında verdiğimizde değişkenin sınıfından bir değer atanmadan atanır. Sonradan atadığımız değerler geçersiz olur. Bunu bir örnekle inceleyelim.
 
 
class Televizyon
    {
        public bool Renklimi;
        public string Marka;
        public static double fiyat = 25;
    }
 
static void Main(string[] args)
        {
            Televizyon.fiyat = 11;
           
            Console.WriteLine(Televizyon.fiyat);
        }
Sonuç çıktısı: 25
 

- Static Sınıflar (Static Classes)
 
- Static olarak tanımlanmış sınıflara ait nesne örneklerini üretemeyiz.
- Static sınıflara ait nesne tanımlamalarını da yapamayız.
- Static olarak tanımlanmış sınıflardan başka sınıflar türetilemez.
- Static olarak tanımlanmış sınıflardan başka static sınıflar da türetilemez.
- Statik tipler örneklenemez!
- Statik tipler içerisinde nonstatic üyeler oluşturulamaz.

 
namespace Static
{
    static class Hesap
    {
        public static string x = "merhaba";
       
        public static int Topla(int x, int y)
        {
            return x + y;
        }
    }
}
  
 namespace Static
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Hesap.x);
            Console.WriteLine(Hesap.Topla(21,3));
           
        }
    }
}
 
 
Aşağıdaki static olarak tanımlanmış sınıflardan başka sınıflar türetemeyeceğimizi belirtir.
 
static class Class1
   {
        public static int x = 50;
        public static void Method()
        {
            Console.WriteLine("Ben static metodum.");
        }
   }
 
 
class Class2:Class1
    {
 
    }
       
static void Main(string[] args)
    {
 
    Class1.Method(); // Sonuç: Hata
    Console.WriteLine(Class2.x); // Sonuç: Hata

// Kuralımız: Static olarak tanımlanmış sınıflardan başka sınıflar türetilmez..
 
    }
 
Yazan:  Özgür Özmen
E-mail: ozgurozmentr@gmail.com
Tarih: 06.11.2008