C#’ta Const, Readonly ve Static Anahtar Kelimeleri Arasındaki Farklar


C# programlama dilinde “const”, “readonly” ve “static” anahtar kelimeleri, veri saklama ve yönetme konusunda önemli roller oynar. Ancak her biri farklı kullanım alanlarına sahiptir ve belirli senaryolarda tercih edilir. Bu yazıda, bu üç anahtar kelimenin farklarını detaylı bir şekilde inceleyeceğiz.

1. Const (Sabit Değerler)

const anahtar kelimesi, derleme zamanında değeri belirlenen ve değiştirilemez sabitler oluşturmak için kullanılır.

Özellikleri:

  • Değeri yalnızca tanımlandığında atanabilir ve sonrasında değiştirilemez.
  • Derleme zamanında (compile-time) sabitlenir.
  • Sadece temel veri türleri (primitive types) ve string ile kullanılabilir.
  • Nesne başlatıcısı (constructor) içinde atanamaz.
  • static olarak tanımlanmadan da kullanılabilir.

Kullanım Örneği:

class Example
{
    public const double Pi = 3.14159;
}

2. Readonly (Salt Okunur Değişkenler)

readonly anahtar kelimesi, değerinin sadece nesne oluşturulurken (constructor içinde) veya değişken tanımlandığında atanmasını sağlar.

Özellikleri:

  • Değeri sadece tanımlandığında veya constructor içinde atanabilir.
  • Çalışma zamanında (runtime) değişkenin değeri belirlenebilir.
  • const’tan farklı olarak, referans tipleri de içerebilir.
  • Değer ataması nesne oluşturulduğunda yapılabildiği için, dinamik verilerle kullanılabilir.
  • Static olarak da tanımlanabilir, ancak atama işlemi yalnızca bir kez yapılır.
  • Readonly değişkenler, yalnızca okunabilir olup, bir kez atandıktan sonra değiştirilemez.

Kullanım Örneği:

class Example
{
    public readonly int MyValue;

    public Example(int value)
    {
        MyValue = value; // Constructor içinde atama yapılabilir.
    }
}

Static Readonly

Bir değişken hem static hem de readonly olarak tanımlanabilir. Bu durumda, değeri yalnızca sınıf ilk yüklendiğinde atanabilir ve sonrasında değiştirilemez.

class Example
{
    public static readonly int MaxValue;

    static Example()
    {
        MaxValue = 100; // Static constructor içinde atanabilir.
    }
}

3. Static (Statik Üyeler)

static anahtar kelimesi, bir sınıfa ait üyelerin nesne oluşturmadan erişilebilir olmasını sağlar.

Özellikleri:

  • Nesneye değil, sınıfa ait olur.
  • Tüm nesneler için ortak bir değişken veya metot sağlar.
  • Constructor içinde kullanılabilir, ancak yalnızca static constructor içinde.
  • Static değişkenler program süresince bellekte kalır.
  • Static metotlar, yalnızca static üyelerle çalışabilir.
  • Static sınıflar oluşturulabilir ve bu sınıfların tüm üyeleri static olmak zorundadır.
  • Static üyeler, nesne örneği oluşturulmadan doğrudan sınıf adı üzerinden erişilebilir.

Kullanım Örneği:

class Example
{
    public static int Counter = 0;
    
    public static void IncreaseCounter()
    {
        Counter++;
    }
}

Static Constructor

Static bir sınıfın veya static üyelerin başlatılması için static constructor kullanılabilir. Bu constructor, sınıfın ilk çağrıldığı anda çalıştırılır ve yalnızca bir kez çalıştırılır.

class Example
{
    public static int Counter;

    static Example()
    {
        Counter = 10; // Static constructor içinde başlatma yapılabilir.
    }
}

Static Sınıflar

Static sınıflar, yalnızca static metotlar ve değişkenler içeren sınıflardır. Nesne oluşturulamaz ve tamamen yardımcı (utility) sınıflar olarak kullanılırlar.

static class MathHelper
{
    public static double Square(double number)
    {
        return number * number;
    }
}

Const vs Readonly vs Static

ÖzellikConstReadonlyStatic
Değeri değiştirilebilir mi?HayırSadece constructor içinde atanabilirEvet
Ne zaman belirlenir?Derleme zamanıÇalışma zamanıÇalışma zamanı
Nesneye mi bağlıdır?HayırEvetHayır (Sınıfa bağlıdır)
Hangi türlerle kullanılabilir?Temel türler ve stringHerhangi bir türHerhangi bir tür

Sonuç

  • Sabit bir değer için const kullanılır.
  • Nesne oluşturma sürecinde değişken ataması gerekiyorsa readonly tercih edilir.
  • Tüm nesneler arasında ortak bir değişken veya metod gerekiyorsa static kullanılır.

Umarım bu yazı, C#’ta const, readonly ve static anahtar kelimeleri arasındaki farkları anlamanıza yardımcı olmuştur.

Bilinmeyen adlı kullanıcının avatarı

About Tuncay Uyar

#CODER #PROGRAMMER #DEVELOPER #CSHARP #DOTNET #SQL #PLSQL #MSSQL #HTML #CSS #JAVASCRIPT #JQUERY #AJAX #XML #JSON #ASPNET #ADONET #AGILE #SCRUM
Bu yazı C# içinde yayınlandı ve , , olarak etiketlendi. Kalıcı bağlantıyı yer imlerinize ekleyin.

Yorum bırakın