Merhaba Arkadaşlar,
Bugünkü konumuzda ise static anahtarı sözcüğü ile bir kaç örnekle “Static sınıf nedir? Static üye nedi? nasıl çağrılır? Avantaj ve dezavantajları nedir?” bilgilerine yönelik paylaşım yapmayı planlıyorum.
Öncelikle “static” sözcüğünden bahsetmek istiyorum;
.Net Framework mimarisi üzerine kurulu sınıflar,metotlar,yapılar ve daha birçok konu barındırmaktadır.Henüz birçoğunun ismini saymadığım halde gelen bu kod yapılarının bazıları sürekli RAMbellekte bazıları ise yeri geldiğinde RAM belleğe yazılır ve işleri bittiğinde bellekten silinirler.
Bellekte sürekli kalan kod yapılarına static diyoruz.
Static olarak tanımlanan nesneler bilgisayarımızın belleğinde program kapatılıncaya kadar sabit bir şekilde kalırlar ve bunlar bir sınıfın propertyleri gibi değer
alabiliyorlarsa üzerlerine yeni değer yazılana kadar hep öyle kalırlar.
Static olarak tanımlanan nesneler bilgisayar belleğinde sürekli kaldığı için belli bir RAM tüketirler ancak en büyük avantajları ise new instance almadan anlık bir biçimde erişilebilme ve kullanılabilme şansı tanırlar.
Static anahtar sözcüğüyle tanımlanan nesnelerden en başta olanlar ise classlardır.
*/Static tanımlanan bir sınıfın içerisindeki metotlar,propertyler,fieldler vs. her şey yine static sözcüğüyle belirtilmek zorundadır.
*/Static olmayan bir sınıfta nesnelerin hepsi static olmak zorunda değildir.
Visual Studio’yu açıyor ve C# dilinde yeni bir Windows Form projesi oluşturduktan sonra projemize “Insan” adında yeni bir sınıf ekliyoruz:
Insan sınıfımız şimdilik static yapıda olmasın ancak sınıfımızın içine “Gul” isimli static bir metot yazalım:
Dikkat ederseniz sınıfın kendisi static tanımlı değil ancak içerisindeki metot static yapıdadır.Bu bize ne kazandıracak derseniz şimdi projemizin formuna gidiyor ve Form_Load metodu içerisine sınıfımızın adını yazıyor ardından nokta tuşuna basarak metodumuza ulaşıyoruz:
Gördüğünüz gibi sınıfımız için new anahtar sözcüğü olmadan yaniinstance oluşturmadan doğrudan sınıfın içersindeki elemana ulaştık.
Sınıfımıza tekrar geri dönelim ve bu kezde “Isim” adında static bir property oluşturalım:
Tekrar formun load eventine gidiyor ve insan class’ının isim property’sine değer veriyoruz:
Artık bu değer program kapatılıncaya ya da tekrar değer verilinceye kadar hep bilgisayar belleğinde sabit bir şekilde kalacak ama sınıftan instance almaya gerek kalmadan çok kolay bir şekilde bu property’nin değerine ulaşabileceğiz.
Static kavramı ile bilmemiz gereken önemli bir nokta ise,eğer static olmayan (bu örnekteki gibi) bir sınıfın içerisindeki nesne (property,metod vs) static olarak tanımlanmazsa o nesneye sadece instance alınarak ulaşılabilir.
Bu savı doğrulamak için yine Insan sınıfının içerisine bu defa static olmayan “Kos” isimli bir metot yazalım:
Tekrar formun load eventine dönelim ve sınıf adını yazarak “Kos” metoduna erişmeye çalışalım ve hata aldığımız görelim.
Gördüğünüz gibi static olmayan sınıfımızın içerisindeki metodumuz static olmadığı için ulaşamıyoruz,eğer ulaşmak istersek instance alarak ulaşmamız gerekmektedir.
Çünkü bu sınıf static değil ve bu metot da static değildir. Yani RAm de yer kaplamıyor ve yeri hazır değildir.
Ayrıca static olmayan bir sınıfta static olan nesneleri instance alarak çağırmak istesek bu nesnleler static olmayan bir sınıfta olduğu halde instance alarak çağıramayacağızdır.
Yararlı olması dileğiyle.