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
| Özellik | Const | Readonly | Static |
|---|---|---|---|
| Değeri değiştirilebilir mi? | Hayır | Sadece constructor içinde atanabilir | Evet |
| Ne zaman belirlenir? | Derleme zamanı | Çalışma zamanı | Çalışma zamanı |
| Nesneye mi bağlıdır? | Hayır | Evet | Hayır (Sınıfa bağlıdır) |
| Hangi türlerle kullanılabilir? | Temel türler ve string | Herhangi bir tür | Herhangi bir tür |
Sonuç
- Sabit bir değer için
constkullanılır. - Nesne oluşturma sürecinde değişken ataması gerekiyorsa
readonlytercih edilir. - Tüm nesneler arasında ortak bir değişken veya metod gerekiyorsa
statickullanılır.
Umarım bu yazı, C#’ta const, readonly ve static anahtar kelimeleri arasındaki farkları anlamanıza yardımcı olmuştur.