C#

C# Static

Yazar - UĞUR

Şimdi static anahtar kelimesini tartışmanın zamanı geldi.
İlk olarak Main metodunun bildiriminde gördük:

static void Main(string[] args)

Class üyeleri (variables, properties, methods)  static olarak da bildirilebilir. Bu üyeleri münferit nesnelere ait olmak yerine sınıfın kendisine ait yapar. Sınıfın kaç nesnesi oluşturulmuş olursa olsun, statik üyenin yalnızca bir kopyası vardır.
Örneğin:

class Cat {
 public static int count=0;
 public Cat() {
 count++;
 }
}

Örnekte, static olan bir public üye değişkeni count olşturduk. Sınıfın constructorı count değişkenini bir arttırır.

Kaç tane Cat nesnesi oluşturulmuş olursa olsun, static ilan edildiğinden, Cat sınıfına ait tek bir count değişkeni vardır.

Global nitelikleri nedeniyle, static üyelere, nesne oluşturulmadan sınıf adını kullanarak doğrudan erişilebilir.
Örneğin:

class Cat {
 public static int count=0;
 public Cat() {
 count++;
 }
}
static void Main(string[] args)
{
 Cat c1 = new Cat();
 Cat c2 = new Cat();

 Console.WriteLine(Cat.count);
}
//Outputs 2

Gördüğünüz gibi static değişkene Cat.count sınıf adını kullanarak erişebiliriz.
Count değişkeni tüm Cat nesneleri arasında paylaşılır. Bu sınıf için her bir nesne oluşturulduğunda, static değer artırılır. Yukarıdaki program, bu sınıfın iki nesnesini oluşturduktan sonra Cat.count ekrana yazdırılınca 2 değerini vermesi bunu göstermektedir.

Static üyelere sınıf adını kullanarak erişmelisiniz. Onlara bir sınıfın bir nesnesi aracılığıyla erişmeye çalışırsanız hata alırsınız.

Static Methods (Statik Metotlar)

Aynı kavramlar static metotlar için de geçerlidir.
Örneğin:

class Dog
{
 public static void Bark() {
 Console.WriteLine("Woof");
 }
}

static void Main(string[] args)
{
 Dog.Bark();
}
// Outputs "Woof"

Statik metotlar yalnızca static üyelere erişebilir.

Main metodu static olarak tanımlıdır, çünkü herhangi bir programın başlangıç noktasıdır. Dolayısıyla doğrudan Main‘den gelen herhangi bir metot static olmalıydı.

Constant (Sabit) üyeler tanım gereği statiktir(static).
Örneğin:

class MathClass {
 public const int ONE = 1;
}

static void Main(string[] args) {
 Console.Write(MathClass.ONE);
}
//Outputs 1

Gördüğünüz gibi sınıfın adını kullanarak static bir üye gibi ONE özelliğine erişiyoruz. Bunun nedeni, tüm const üyelerinin varsayılan olarak static olmasıdır.

Static Constructors

Constructor lar , sınıfın static üyelerini başlatmak için static olarak bildirilebilir.
Statik constructor , sınıfın static üyesine eriştiğimizde otomatik olarak bir kez çağrılır.
Örneğin:

class SomeClass {
 public static int X { get; set; }
 public static int Y { get; set; }
 
 static SomeClass() {
 X = 10;
 Y = 20;
 }
}

SomeClass.X veya SomeClass.Y‘ye erişmeye çalıştığımızda constructor bir kez çağrılır.

Yorum Yap

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