C# Static Metotlar Kavramı

C# Dersleri Ahmet Şenlik 3.389 kez görüntülendi.

Şimdiye kadar metotlara ancak tanımlanan sınıfın bir örneği oluşturularak erişildi. Ama gerçekte bu her zaman gerekli değildir. Örneğin, Console sınıfının WriteLine metodu hatırlanmalıdır.

Console.WriteLine("Merhaba");

Görüldüğü gibi ekrana “Merhaba” yazmak için Console sınıfının bir örneği oluşturulmadı. Çünkü bunu yapmak için nesneye gerek yoktur, gerekli olan sadece metottur. Ancak tüm metotlar bir sınıfın içinde tanımlanmak zorundadır. Neyse ki bir yöntem ya da alanı static (statik) olarak tanımlanırsa herhangi bir nesne oluşturmadan sadece sınıfın adı kullanılarak metot çağrılabilir veya alana erişilebilir. Buradan da anlaşılacağı üzere Console sınıfı içerisinde WriteLine metot aşağıdaki söz dizimi ile static olarak tanımlandığı için onu bu şekilde kullanılabilmektir.

public static void WriteLine(string value)

Paylaşılan Alan Oluşturma

Sınıf içerisinde tanımlanan alanlar da static olarak oluşturulabilecek. Ancak burada
dikkat edilmesi gereken önemli bir durum mevcuttur. Alanlar bilgi sakladıkları için static
olarak tanımlanan alanlar o sınıftan oluşturulmuş bütün nesneler tarafından paylaşılır. Bu, bir
örnekle açıklamaya çalışılsın.

class Bisiklet
{
   int hiz = 0;
   int vites = 1;
   public static int BisikletSayisi = 0;
      public Bisiklet()
      {
         vites = 2;
         BisikletSayisi++; // Alanın değeri 1 artırılıyor
      }
      public void VitesDegistir(int yeniDeger)
      {
         vites = yeniDeger;
      }
      public void Hizlan(int artis)
      {
         hiz = hiz + artis;
      }
      public void BilgileriYaz()
      {
         Console.Write("Bisiklet Sayısı: {0} ", BisikletSayisi);
         Console.Write("Vites: {0} ", vites);
         Console.WriteLine("Hız: {0}", hiz);
      }
}
static void Main(string[] args)
{
   Bisiklet bisiklet1 = new Bisiklet();
   bisiklet1.BilgileriYaz();
   Bisiklet bisiklet2 = new Bisiklet();
   bisiklet2.BilgileriYaz();
   Bisiklet cocukBisikleti = new Bisiklet();
   cocukBisikleti.BilgileriYaz();
   Bisiklet dagBisikleti = new Bisiklet();
   dagBisikleti.BilgileriYaz();
}

Ekran çıktısı:
Bisiklet Sayısı: 1 Vites: 2 Hız: 0
Bisiklet Sayısı: 2 Vites: 2 Hız: 0
Bisiklet Sayısı: 3 Vites: 2 Hız: 0
Bisiklet Sayısı: 4 Vites: 2 Hız: 0

Tüm Bisiklet nesneleri BisikletSayisi alanını paylaşır. Bu sebeple BisikletSayisi++ ifadesi her yeni örnek oluşturulduğunda aynı veriyi bir artırır. Ayrıca bu alan aşağıdaki şekilde de yazdırılabilir:

Console.WriteLine("Bisiklet Sayısı: {0}", Bisiklet.BisikletSayisi);

“const” ile Static Bir Alan Oluşturma

Bir alanın hem statik olduğunu hem de değerinin hiçbir zaman değiştirilmeyeceği const (constant : sabit) anahtar sözcüğü ile belirtilir. Const bir alan bildiriminde ayrıca static anahtar kelimesi kullanılmalıdır. Aşağıda Math sınıfının PI adındaki const alanın tanımlaması görülmektedir.

public const double PI = 3.14159;

Static Sınıflar

Programlama dilinde sınıflar da static olarak tanımlanabilir. Static sınıflar diğer sınıflardan farklı olarak sadece static alanlar ve metotlar içerebilir. Static sınıflar, uygulama içerisinde pek çok durumda işe yarayacak yararlı metot ve alanları bir arada tutmak için kullanılır. Static olarak tanımlanmış sınıflardan new anahtar kelimesi ile yeni bir nesne örneklemek istendiğinde derleyici hatası ile karşılaşılır. Math sınıfının sadece static üyeler içeren sürümü aşağıdaki gibi tanımlanabilir:

public static class Math
{
public const double E = 2.71828;
public const double PI = 3.14159;
public static int Max(int val1, int val2) {. . .}
public static byte Min(int val1, int val2) {. . .}
public static double Pow(double x, double y) {. . .}
}

Anonim Sınıflar

Sınıf adı kullanmadan sadece new anahtar sözcüğünün devamında küme parantezleri içerisinde alan tanımlaması yaparak oluşturulan sınıflara anonim sınıflar denir. Aşağıdaki örnekte ogretmen değişkenine anonim bir sınıf değer olarak aktarılmıştır.

var ogretmen = new { Ad = "Kemal", Yas = 33 };

Anonim sınıflar metot tanımlaması içeremez ve sahip oldukları alanların hepsi public olmalıdır. Ayrıca bütün alanlara bir başlangıç değeri verilmelidir.

Kocaeli Üniversitesinde Bilgisayar Programcılığı okudum DGS ile 2016 yılında Sakarya Üniversitesi Bilgisayar mühendisliğini kazandım. Yazılımla uğraşmayı çok seviyorum bu alanda kendimi daha da geliştirmeyi düşünüyorum. Eğer siz de seviyorsanız bu işi devam edin başlamadıysanız başlayın başaracağınıza inanın. 🙂

Sosyal Ağlarda Paylaş

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.