Struct ve Enum

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

ÖzellikStructClass
Bellekte SaklanmaStack (Yığın)Heap (Yığın Bellek)
Varsayılan Erişim BelirteciPublicPrivate
Nesneye Yönelimli Programlama (OOP)Kalıtımı desteklemezKalıtımı destekler
Varsayılan DeğerOtomatik olarak atanırnull olabilir
PerformansKüçük veri yapıları için daha hızlıdırBü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); // 4
C#

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); // 10
C#

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ı

ÖzellikStructEnum
Veri TürüVeri saklayan küçük yapılarSabit değerler
Bellekte SaklanmaStackStack
Özelleştirilebilir mi?Evet (alanlar, metotlar içerebilir)Hayır (sadece sabit değerleri tutar)
İçerisinde Metot Olabilir mi?EvetHayır
Kullanım AlanıKüçük ve hafif veri yapıları içinSabit değerleri daha okunaklı hale getirmek için