C# programlama dilinde struct ve enum yapıları, belirli veri kümelerini ve sabit değerleri daha düzenli bir şekilde yönetmemizi sağlar. Struct veri yapıları daha çok küçük, hafif veri objeleri oluşturmak için kullanılırken, Enum sabit değerlerin daha okunabilir ve anlamlı hale getirilmesi için tercih edilir.
1. Struct (Yapılar)
1.1. Struct Nedir?
- Struct (Yapı), değer tipli (value type) bir veri yapısıdır.
- Küçük ve basit veri modelleri için uygundur.
- Heap yerine Stack üzerinde saklanır, bu nedenle bellekte hızlıdır.
- İçinde alanlar (fields), metotlar (methods), özellikler (properties) içerebilir.
- Nesne yönelimli (OOP) programlamaya uygun değildir, kalıtım (inheritance) desteklemez.
1.2. Struct Tanımlama
Struct, class’a benzer şekilde tanımlanır ancak struct anahtar kelimesi kullanılır.
struct Nokta
{
public int X;
public int Y;
// Constructor (İsteğe Bağlı)
public Nokta(int x, int y)
{
X = x;
Y = y;
}
public void Yazdir()
{
Console.WriteLine($"Nokta: ({X}, {Y})");
}
}C#1.3. Struct Kullanımı
Nokta n1 = new Nokta(10, 20); // Struct oluşturma
n1.Yazdir(); // Nokta: (10, 20)C#Not: Struct kullanırken new anahtar kelimesi zorunlu değildir. Eğer new kullanmazsak, alanları elle atamak gerekir.
Nokta n2;
n2.X = 5;
n2.Y = 15;
n2.Yazdir();C#1.4. Struct ile Class Arasındaki Farklar
| Özellik | Struct | Class |
|---|---|---|
| Bellekte Saklanma | Stack (Yığın) | Heap (Yığın Bellek) |
| Varsayılan Erişim Belirteci | Public | Private |
| Nesneye Yönelimli Programlama (OOP) | Kalıtımı desteklemez | Kalıtımı destekler |
| Varsayılan Değer | Otomatik olarak atanır | null olabilir |
| Performans | Küçük veri yapıları için daha hızlıdır | Büyük ve karmaşık yapılar için uygundur |
2. Enum (Sabitler)
2.1. Enum Nedir?
- Enum (Enumeration – Numaralandırma), sabit değerleri daha okunabilir ve anlaşılır hale getirmek için kullanılır.
- String yerine anlamlı isimlerle tanımlanır ve arka planda tamsayı değerleri alır.
- Veriyi daha anlamlı ve kodu okunaklı hale getirir.
- Varsayılan olarak ilk eleman 0 değerini alır, diğerleri +1 artarak devam eder.
2.2. Enum Tanımlama
enum Gunler
{
Pazartesi, // 0
Salı, // 1
Çarşamba, // 2
Perşembe, // 3
Cuma, // 4
Cumartesi, // 5
Pazar // 6
}C#2.3. Enum Kullanımı
Gunler bugun = Gunler.Cuma;
Console.WriteLine(bugun); // Cuma
Console.WriteLine((int)bugun); // 4C#Not: (int)bugun ifadesi, Cuma sabitinin sayısal karşılığını (4) verir.
2.4. Enum’a Özel Değerler Atama
Varsayılan olarak ilk eleman 0 değerini alır. Fakat özel değerler atanabilir.
enum Renkler
{
Kırmızı = 1,
Mavi = 10,
Yeşil = 15,
Sarı = 20
}C#Console.WriteLine(Renkler.Mavi); // Mavi
Console.WriteLine((int)Renkler.Mavi); // 10C#2.5. Enum ile Koşul Kullanımı
void MesajVer(Gunler gun)
{
if (gun == Gunler.Cumartesi || gun == Gunler.Pazar)
{
Console.WriteLine("Hafta sonu, tatil günü!");
}
else
{
Console.WriteLine("Hafta içi, çalışmalısın!");
}
}
// Kullanım
MesajVer(Gunler.Cuma); // Hafta içi, çalışmalısın!
MesajVer(Gunler.Pazar); // Hafta sonu, tatil günü!C#2.6. Enum ile Switch Kullanımı
Enum’ları switch-case ile de kullanabiliriz.
Gunler gun = Gunler.Çarşamba;
switch (gun)
{
case Gunler.Pazartesi:
Console.WriteLine("Haftanın ilk günü.");
break;
case Gunler.Çarşamba:
Console.WriteLine("Haftanın ortası.");
break;
case Gunler.Cuma:
Console.WriteLine("Hafta sonuna az kaldı.");
break;
default:
Console.WriteLine("Haftanın diğer günleri.");
break;
}C#C#
Haftanın ortası.C#3. Struct ve Enum Karşılaştırması
| Özellik | Struct | Enum |
|---|---|---|
| Veri Türü | Veri saklayan küçük yapılar | Sabit değerler |
| Bellekte Saklanma | Stack | Stack |
| Özelleştirilebilir mi? | Evet (alanlar, metotlar içerebilir) | Hayır (sadece sabit değerleri tutar) |
| İçerisinde Metot Olabilir mi? | Evet | Hayır |
| Kullanım Alanı | Küçük ve hafif veri yapıları için | Sabit değerleri daha okunaklı hale getirmek için |