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:
| Belirleyici | Açıklama |
|---|---|
| private | Sadece tanımlandığı sınıf içinden erişilebilir. |
| public | Her yerden erişilebilir. |
| internal | Sadece aynı proje (assembly) içinden erişilebilir. |
| protected | Sadece 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.