CodeBlanks Logo Icon CodeBlanks

Sabitler vs readonly

C# kursu · Orta seviye · Ders 38/116

const ve readonly arasındaki kullanım farklarını öğrenirsin.

Sabitler vs readonly

const ile readonly benzer ama farklı amaçlara hizmet eder. const derleme zamanında, readonly çalışma zamanında değer alır.

const değerler tüketicilere gömülür; başka bir derleme onu kullanırsa değeri kendi içine kopyalar. Bu yüzden const'u değiştirince tüketicileri yeniden derlemen gerekir. readonly ise her seferinde tek bir kaynaktan okunur; değer değişince yalnızca tanımlandığı derleme güncellenir. Genel API'lerde bu fark önemlidir.

Sürümleme etkisi

Const'un gömme davranışı sürümleme (versioning) sorunları yaratır. Örneğin public const int MaxSize = 10; başka bir derlemeye 10 olarak yazılır. Sen MaxSize'ı 20 yaparsan ve yalnızca tanımlayan derlemeyi yayınlarsan, tüketici eski 10 değerini kullanmaya devam eder.

Bu yüzden genel API'lerde static readonly tercih edilir: değer her seferinde tek kaynaktan okunur ve güncelleme anında yayılır. const içerideki (internal) sabitler için güvenlidir.

Uygulama Ayarlar sınıfı

Settings sınıfına public const string AppName = "Quiz"; ve public readonly DateTime BuildDate; alanlarını ekle. Yapıcı this.BuildDate = buildDate; atamasını yapsın. Main'de new Settings(new DateTime(2024, 1, 15)) üretip Settings.AppName ve BuildDate.Year'ı yazdır.

Örnek çözümü göster
Settings içine `public const string AppName = "Quiz";` ve `public readonly DateTime BuildDate;` ekle. Yapıcıda `this.BuildDate = buildDate;` yaz. Main içine `var s = new Settings(new DateTime(2024, 1, 15)); Console.WriteLine(Settings.AppName); Console.WriteLine(s.BuildDate.Year);` yaz.
Örnek çözüm:
using System;

class Settings
{
    public const string AppName = "Quiz";
    public readonly DateTime BuildDate;

    public Settings(DateTime buildDate)
    {
        this.BuildDate = buildDate;
    }
}

class Program
{
    static void Main()
    {
        var s = new Settings(new DateTime(2024, 1, 15));
        Console.WriteLine(Settings.AppName);
        Console.WriteLine(s.BuildDate.Year);
    }
}

Kendini test et

  1. Eşleştir: const vs readonly

    const
    derleme zamanı
    readonly
    çalışma zamanı
    const gömme
    tüketici yeniden derlenmeli
    readonly örnek
    her örnekte ayrı olabilir
  2. Sabitler ile ilgili hangisi doğrudur?

    • const çalışma zamanında hesaplanır.
    • readonly örtük olarak statiktir.
    • const değeri değişmez ama readonly yapıcıda atanabilir.
    • const ve readonly tamamen aynıdır.
    Cevabı göster

    const değeri değişmez ama readonly yapıcıda atanabilir. — Doğru. const değişmez; readonly yapıcıda atanır ve sonrasında değişmez.

  3. Boşluğu doldur: çalışma zamanı değeri

    class Settings
    {
        public readonly DateTime BuildDate = ____;
    }
    Cevabı göster
    class Settings
    {
        public readonly DateTime BuildDate = new DateTime(2024, 1, 15);
    }

Orta seviye bölümündeki tüm dersler