Sabitler vs readonly
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
-
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
-
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.
-
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); }