Serkan Ayyıldız

Meraklı bir yazılım uzmanı...

C# Static Sınıflar ve Üyeler

C#.Net seven yazılımcılara yeniden selamlar :)

Sisli bir İstanbul Pazar'ında boş bir vakit bulmuşken sizlere C# static kavramını öğretmek istedim ve nesne yönelimli programlama (OOP) konusunda kendinizi geliştirmek istiyorsanız bu konuyu öğrenmeniz şart koşulabilir.

Ö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 RAM bellekte bazıları ise yeri geldiğinde RAM belleğe yazılır ve işleri bittiğinde bellekten silinirler.

İşte bellekte sürekli kalan kod yapılarına static (durağan,statik) 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.
Teorik kısmı biraz uzun olan bu konuyu maalesef pratiğe geçmeden tam anlamalıyız,o yüzden sıkılabilirsiniz :)

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.Zaten instance (örnek kopya) alarak yaptığımız herşey dinamik yapıda olduğu için onlara static demiyoruz.

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 ancak static olmayan bir sınıfta (şimdiye kadar öğrendiğimiz) nesnelerin hepsi static olmak zorunda değildir.Bu özelliği ise C# ile Java programlama dilinin ortak özelliğidir.

Şimdi çok şükür diyebilirsiniz ve artık pratiğe geçme zamanı geldi,hemen 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:

c#-class

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:

c-sharp-static-metod

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:

static-metot-çağırma

Gördüğünüz gibi sınıfımız için new anahtar sözcüğü olmadan yani instance (örnek kopya) oluşturmadan doğrudan sınıfın içersindeki elemana ulaştık.
Sınıfımıza tekrar geri dönelim ve "Isim" adında static bir property oluşturalım:

c#-statik-property

Tekrar formun load eventine gidiyor ve insan class'ının isim property'sine değer veriyoruz:

static-property-değer

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:

c-sharp-static-metod

Tekrar formun load eventine dönelim ve sınıf adını yazarak "Kos" metoduna erişmeye çalışalım:

static-metod-çağırma

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

static-olmayan-metot

şeklinde sınıfımızdan instance olarak erişmemiz gerekiyor.Zaten gördüğünüz gibi static olmayan bir sınıftan instance alındığında bu defa static metodlarımız gelmiyor.

Şu ana kadar anlattıklarım konusunda kafanız karışmış olabilir ya da anlamamış olabilirsiniz ama üzülmeyin object orianted programming öyle damdan düşer gibi öğrenilecek kolay bir konu değil o yüzden biraz araştırmacı yönünüzü biraz da kendinize zaman tanıyarak bu konulara aşina olabilirsiniz :)

Sıra geldi static sınıflara..Şimdiye kadar öğrendiğimiz static olmayan sınıflardan farkı static olarak tanımlanan bir sınıf asla ve asla "new" anahtar sözcüğüyle instance alınamaz,sadece sınıfın adı yazılarak çağırılabilir.Dolayısıyla static olarak tanımlanan bir sınıfın içindeki tüm metot ve property'ler static olarak tanımlanmak zorundadırlar.

Konuyu pratiğe dökmek adına şimdi de "Araba" adında static bir sınıf oluşturalım:

static-class

Static olan sınıfımıza hatayı görmek adına static olmayan "Hızlan" isminde bir metot yazalım ve derleyicini verdiği hatayı görelim:

static-olmayan-üye

Böylece derleyici bize C# dilinde static olarak tanımlanmış bir sınıfın üyelerininde static olması gerektiğinden bahsediyor.Metodumuzu tekrar static olarak düzeltelim:

static-class

Formun load eventine geçerek "Araba" isimli sınıfımızın metoduna ulaşalım:

static-sınıf

Yine dikkat ederseniz static olmayan bir sınıfın içerisindeki static üyeye,static olan bir sınıfın içindeki static üye gibi kolayca ulaşabiliyoruz.Burdaki temel fark ise static olarak tanımlanan sınıfında bellekte sabitlendiğidir.Dolayısıyla çok fazla bellek kullanmamak için sınıfları statik kullanmasakta olur.Tabi burda tercih yine yazılımcıya kalmış. :)

Şimdi bu makalemizde öğrendiğimiz konuyu tekrar gözden geçirelim:

1-Static olmayan sınıfın üyeleri static değilse bu üyelere "new" sözcüğüyle instance alınarak ulaşılabilir.
2-Static olmayan sınıfın üyeleri static olarak tanımlanmışsa bu üyelere sadece sınıfın ismini yazarak
kolaylıkla ulaşabiliriz.
3-Static olan sınıfın üyeleride static olarak tanımlanmak zorundadır.
4-Static bir sınıfın üyelerine erişmek için 2.maddeyi uygularız.

Şu anda static classlar konusu ile ilgili olarak öğreteceklerim bu kadarla sınırlı kalıyor,ileride bloğuma yeni bir yazılım
alt kategorisi açarak object orianted programming,aspect orianted programming ve çok katmanlı programlama gibi ileri
teknik makaleler paylaşmayı planlıyorum.
Böylece programlama dünyasının uçsuz bucaksız olduğunu anlamış olacaksınız.

Makalemiz burada sona eriyor,bir sonraki makalemizde görüşmek üzere hoşçakalın :)

Projeyi İndir



Bir yorum bırak E-posta adresiniz yayınlanmayacaktır.

Menu