C# dilinde sabit değerler ve değiştirilemez üyeler tanımlamak için const ve readonly anahtar sözcükleri kullanılır. Ayrıca, bir sınıf veya metodu devralınamaz hale getirmek için sealed anahtar sözcüğü kullanılır. Bu yazıda, sabit tanımlama yöntemlerini ve sealed sınıf/metot kullanımını inceleyeceğiz.
const
, sabit bir değeri temsil eder. Sabit bir değişkenin değeri derleme zamanında belirlenir ve sonradan değiştirilemez. Sabitler, genellikle uygulama genelinde değişmeyecek değerleri temsil eder (örneğin, matematiksel sabitler gibi).
int
, double
, string
, vb.) ile kullanılabilir.class MathConstants { public const double Pi = 3.14159; // Sabit tanımlama } class Program { static void Main(string[] args) { Console.WriteLine($"Pi Değeri: {MathConstants.Pi}"); } }
Pi Değeri: 3.14159
readonly
anahtar sözcüğü, bir alanın yalnızca tanımlandığı yerde veya bir yapıcı (constructor) içinde başlatılabileceğini belirtir. readonly
, çalışma zamanında değer atanabilen ancak sonradan değiştirilemeyen veriler için uygundur.
class Configuration { public readonly string DatabaseConnection; // Constructor (yapıcı metot) public Configuration(string connection) { DatabaseConnection = connection; } } class Program { static void Main(string[] args) { Configuration config = new Configuration("Server=myServer;Database=myDB;"); Console.WriteLine($"Veritabanı Bağlantısı: {config.DatabaseConnection}"); } }
Veritabanı Bağlantısı: Server=myServer;Database=myDB;
Özellik | Const | Readonly |
---|---|---|
Atama Zamanı | Derleme Zamanı | Çalışma Zamanı |
Değiştirilebilirlik | Atandıktan sonra değiştirilemez | Yalnızca yapıcıda veya tanımlamada değiştirilebilir |
Desteklenen Türler | Sadece temel veri türleri | Herhangi bir veri türü |
sealed
anahtar sözcüğü, bir sınıfın başka bir sınıf tarafından devralınmasını (inheritance) veya bir metotun alt sınıflar tarafından geçersiz kılınmasını (override) engeller.
Bir sınıfı sealed
olarak tanımladığınızda, o sınıf başka bir sınıf tarafından türetilemez.
sealed class FinalClass { public void DisplayMessage() { Console.WriteLine("Bu sınıf devralınamaz."); } } class Program { static void Main(string[] args) { FinalClass obj = new FinalClass(); obj.DisplayMessage(); } }
class DerivedClass : FinalClass // HATA: FinalClass sealed olduğu için türetilemez { }
Sealed metotlar, bir sınıfın alt sınıfı tarafından geçersiz kılınmasını engeller. Bu metotlar yalnızca override
anahtar sözcüğüyle tanımlanmış bir metotta kullanılabilir.
class BaseClass { public virtual void ShowMessage() { Console.WriteLine("BaseClass: Mesaj Gösteriliyor."); } } class DerivedClass : BaseClass { public sealed override void ShowMessage() { Console.WriteLine("DerivedClass: Mesaj Gösteriliyor."); } } // HATA: AnotherDerivedClass, ShowMessage metodunu geçersiz kılamaz class AnotherDerivedClass : DerivedClass { // public override void ShowMessage() // HATA // { // } }
C#'da sabitler ve final yapıların kullanımı, güvenli ve değiştirilemez kod yazmak için önemli araçlardır. const
, değişmeyen sabit değerler için kullanılırken, readonly
, çalışma zamanında dinamik olarak atanabilir değerler için uygundur. Ayrıca, sealed
anahtar sözcüğü, sınıfın veya metotların türetilmesini ve değiştirilmesini engelleyerek kodun kontrolünü sağlar.