C Sharp’da Static Yapısı
Herkese merhaba,
Bu yazıda C Sharp’da Static yapısı ile ilgili bilgi vermeye çalışacağım.
Static yapısı, içinde bulunduğu sınıftan nesne oluşturulmadan veya hiçbir nesneye referans olmadan kullanılabilen üyeler Static olarak nitelendirilir.
Static yapısı, C Sharp’da kullandığımız bütün sınıflar(Class), ve üyeleri(metot, Field, Property, Delegate, Event, Constructor) için olmassa olmaz bir kavramdır.
Bir sınıf veya üye tanımlanırken Static anahtar sözüğü yazılırsa o sınıfa veya üyeye Static deriz. Eğer yazılmamışsa Non-Static deriz.
Constant( değişmezler veya sabitler ) kendiliğinden Static’tir. ( Özel olarak Static yazamayız çünkü default olarak zaten Static’tirler.)
Readonly,kendiliğinden Static değildir.
Static olma durumunun en bilinen örneği Main() metodudur. Main(), herhangi bir nesne oluşturulmadan önce çağırılması gerektiği için Static olarak tanımlanmıştır.
Oluşturulan her Static eleman herhangi bir örnek uzayda aynı elemandır.
Static Class
Bir Class Static olarak tanımlanıyosa, içerisindeki bütün üyeler Static olarak tanımlanmak zorundadır. Amaç tüm üyeleri Static olmaya zorlamaktır. Static sınıfların özellikleri aşağıdaki gibidir:
- Static sınıflarda kalıtım yoktur.
- C# 2.0 ile birlikte Static anahtar sözcüğü Class’lara da uygulanabilir bir hale geldi.
- Bir Class’a Static anahtar kelimesi uygulandığında içindeki tüm üyeleri Static olmaya zorlamış oluruz yani Static sınıfların içinde Static olmayan metot ya da değişken tanımlanamaz.
- Tek bir özel nesne örneği, sınıfın kullanıldığı anda RAM’in Static bölgesine çıkar.
- Static Sınıfl’ar new ile örneklenemezler. Dolayısıyla heap’te nesne örnekleri bulunmaz yani Static sınıflardan nesne oluşturulamaz. (new Ogrenci(); YANLIŞ)
- Static sınıf türünden referanslar oluşturulamaz. (Ogrenci ogrenci; YANLIŞ)
- Bir Class’ın Static olarak tanımlanması bir zorunluluk değildir sadece okunabilirliği arttıran bir yaklaşımdır.
- statik yapıcılar sınıf program içerisinde ilk örneklendiğinde bir kez çalışır, program
sonlanıncaya kadar bir daha çalıştırılmaz.
- Statik iç içe sınıflar tanımlayabilirsiniz.
Static Yapıcı Metot
Yapıcı metotlarda normal metotlar gibi Static olarak tanımlanabilir. Sınıfın Static değişkenleri ile ilgili işlemler Static yapıcı metodun içerisinde yapılabilir. Static yapıcı metotlar parametre almazlar ve erişim belirteçleri yoktur. Static yapıcı metodu çoğunlukla bir sınıfın static değişkenlerine ilk nesne örneği oluşturulduğunda bir kereliğine değer atmak için kullanabiliriz.
- Static yapıcı metotlar erişim belirleyicisi (access modifiers) kullanamazlar.
- Static yapıcı metotlar parametre alamazlar.
- Static yapıcı metotlar sınıfa ait tüm yapıcılardan önce çalışır.
- Static yapıcı metotlar kaç nesne örneği oluşturulursa oluşturulsun bir kere çalışırlar.
- Bir sınıf sadece bir Static yapıcı metot içerebilir.
- Static yapıcı metod ya ilk nesne örneği oluşturulduğunda ya da ilk static sınıf üyesi çağırılmadan hemen önce yürütülür.
Static Metot
Static olarak tanımlanan bir metodun kullanılabilmesi için tanımlanmış olduğu tipin nesne örneğini oluşturmaya gerek yoktur.
- Static bir metodun This referansı olamaz.
- Static bir metot yalnızca kendi Class’ı tarafından tanımlanan Static değişkenlere erişebilir.
- Static Class’lar nesne oluşturamaz ve yalnızca Static üyeler barındırabilirler.
- Bir sınıf içerisindeki Static olmayan metotlara ve özelliklere o Class’tan oluşturduğumuz nesneler üzerinden erişiriz. Static olan metotlara ve özelliklere ise nesne oluşturmadan Class adı ile erişiriz.
- Bir Metotu Static yapmak için erişim belirleyicisinden sonra Static anahtar kelimesini getirmemiz gerekir.
- Static bir metodun içerisinden Static olmayan metotlar ve değişkenler çağrılamaz. Sadece diğer Static metotlar ve değişkenler çağrılabilir.
Static Field
Static değişkenlere global değişkenler de diyebiliriz.
- Static bir değişkeni tüm üyeler kullanabilir. Yani değeri her yerde aynıdır. Değişken kullanılmadan önce ilk değer ataması yapılır. Eğer ilk değer ataması yapılmazsa nümerik değerler 0, nesne referansları NULL, bool değişkenler ise FALSE değerlerini alırlar.
- Static bir değişkenin her zaman bir değeri vardır. Bir Field alanını Static olarak tanımladığımız takdirde; artık her nesne örneği için özel bir alan olmaktan çıkıp, o sınıfa ait genel bir alan haline gelecektir.
Static Yapısı ile hazırlamış olduğum örneği görmektesiniz.
using System; public class Program { public static void Main() { TestIslem.print(); } public static class Test { private static int id = 5; public static int Id { get { return id; } } } public static class TestIslem { private static int id; static TestIslem() { if (Test.Id < 10) { id = 20; } else { id = 100; } Console.WriteLine("TestIslem Constructoru çağrıldı."); } public static void print() { Console.WriteLine("Test1.id = " + id); } } }
C Sharp’da Static Yapısı ile ilgili anlatacaklarım bu kadar.
Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.