Encapsulation: Property (get, set) ve init Kullanımı

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16

C# Kapsülleme (Encapsulation): Property, get, set ve init Kavramları​


Bir sınıftaki değişkenleri (field) doğrudan dışarıya açmak, evinizin anahtarını kapının üzerinde bırakmaya benzer. İsteyen herkes içeri girip verilerinizi bozabilir. Encapsulation, bu değişkenleri "private" yaparak koruma altına alır ve onlara erişimi belirli kurallar çerçevesinde (Property'ler aracılığıyla) sağlar.



1. Neden Kapsülleme Yapmalıyız?​


Diyelim ki bir BankaHesabi sınıfınız var ve içinde Bakiye değişkeni tutuyorsunuz. Eğer bu değişkeni doğrudan erişime açarsanız, birisi gelip bakiyeyi -5000 yapabilir. Oysa bankacılıkta bakiye negatif (bazı durumlar hariç) olmamalıdır.

Kapsülleme sayesinde:

  • []Kontrol Sağlarsınız: Veri atanırken (set) kontrol edebilir, geçersizse reddedebilirsiniz.
    []Sadece Okunabilir Yapabilirsiniz: Verinin dışarıdan değiştirilmesini engelleyip sadece okunmasını sağlayabilirsiniz.
  • Esneklik Kazanırsınız: İçerideki mantığı değiştirseniz bile, sınıfı kullanan diğer kodlar bundan etkilenmez.



2. Property (Özellik) Kullanımı: get ve set​


C#'ta kapsülleme işlemi Property dediğimiz yapılarla yapılır. Property'ler, dışarıdan bir değişken gibi görünür ama içeride bir metot gibi çalışır.

C#:
public class Personel
{
private int _yas; // Private alan (Field)

public int Yas // Property
{
    get { return _yas; } // Değer okunurken çalışır
    set 
    { 
        // Veri atanırken kontrol yapıyoruz
        if (value >= 18 && value <= 65)
            _yas = value;
        else
            Console.WriteLine("Geçersiz yaş girişi!");
    }
}

}

Auto-Implemented Properties​

Eğer herhangi bir kontrol yapmanıza gerek yoksa, C# size çok daha kısa bir yazım imkanı sunar:

C#:
public string Ad { get; set; } // Arka planda private bir field otomatik oluşturulur.



3. Modern C#: init Anahtar Kelimesi​


Normalde set kullandığınızda, o özelliği nesne ömrü boyunca istediğiniz zaman değiştirebilirsiniz. Ancak bazen bir özelliğin sadece nesne oluşturulurken atanmasını, sonrasında ise değiştirilememesini istersiniz. İşte burada init devreye girer.

C#:
public class Kitap
{
public string Isbn { get; init; } // Sadece nesne oluşturulurken atanabilir
public string Ad { get; set; }
}

// Kullanım:
var kitap = new Kitap { Isbn = "12345", Ad = "C# Rehberi" };
// kitap.Isbn = "54321"; // HATA! init olduğu için sonradan değiştirilemez.



4. Erişim Belirleyiciler (Access Modifiers)​


Kapsülleme yaparken hangi seviyede koruma sağlayacağınızı bu anahtar kelimelerle belirlersiniz:

BelirleyiciAçıklama
privateSadece tanımlandığı sınıf içinden erişilebilir.
publicHer yerden erişilebilir.
internalSadece aynı proje (assembly) içinden erişilebilir.
protectedSadece tanımlandığı sınıfta ve o sınıftan miras alanlarda erişilebilir.



Sonuç​


Kapsülleme, kodunuzu daha güvenli ve yönetilebilir hale getirir. get ve set blokları ile verileriniz üzerinde tam denetim sağlarken, init ile nesne yönelimli tasarımda immutability (değişmezlik) kavramını uygulayabilirsiniz. Unutmayın; iyi bir sınıf, iç dünyasını gizleyen ve dışarıya sadece güvenli kapılar açan sınıftır.
 
Geri
Üst