crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
C# Temelleri: Değişkenler, Veri Tipleri ve Bellek Yönetimi
Programlama dünyasında bir değişken oluşturmak, bilgisayarın hafızasında (RAM) bir kutu kiralamak gibidir. Bu kutunun içine bir sayı, bir metin veya karmaşık bir nesne koyabiliriz. Ancak bu kutuların nasıl çalıştığını anlamak, performanslı ve hatasız kod yazmanın anahtarıdır.
1. Temel Veri Tipleri Nelerdir?
C# dilinde her verinin bir tipi vardır. Belleği verimli kullanmak için ihtiyacımıza en uygun tipi seçmeliyiz.
| Tip | Açıklama | Örnek |
|---|---|---|
| int | Tam Sayılar | 15, -200, 42 |
| double / decimal | Ondalıklı Sayılar | 10.5, 99.99 |
| string | Metin İfadeleri | "Merhaba Dünya" |
| bool | Mantıksal Değer | true, false |
| char | Tek Karakter | 'A', '?' |
C#:
// Değişken Tanımlama Formatı: [Veri Tipi] [Değişken Adı] = [Değer];
int yas = 25;
string isim = "Gökhan";
double bakiye = 1500.50;
bool aktifMi = true;
2. Değer Tipleri vs. Referans Tipleri
İşte burası yazılımcıların "ayrıştığı" nokta. C#'ta veriler bellekte iki farklı bölgede tutulur: Stack ve Heap.
Değer Tipleri (Value Types)
Değer tipleri doğrudan verinin kendisini Stack üzerinde tutar. int, bool, double, struct, enum gibi tipler bu gruptadır. Bir değer tipini başka bir değişkene atadığınızda, verinin bir kopyası oluşturulur.
C#:
int a = 10;
int b = a; // a'nın değeri (10) b'ye kopyalandı.
b = 20; // b değişti ama a hâlâ 10!
Referans Tipleri (Reference Types)
Referans tipleri verinin kendisini Heap üzerinde tutar, ancak bu veriye ulaşmamızı sağlayan "adres" bilgisini Stack'te saklar. string, class, array, interface bu gruptadır. Bir referans tipini kopyaladığınızda veriyi değil, verinin adresini (yolunu) kopyalarsınız.
C#:
int[] sayilar1 = { 1, 2, 3 };
int[] sayilar2 = sayilar1; // Adres kopyalandı, her iki değişken de aynı veriye bakıyor!
sayilar2[0] = 99;
Console.WriteLine(sayilar1[0]); // Çıktı: 99 (Çünkü ikisi de aynı nesne!)
3. Aradaki Temel Farklar Nelerdir?
[]Bellek Konumu: Değer tipleri Stack'te, referans tipleri Heap'te saklanır.
[]Performans: Değer tipleri daha hızlı erişilir ancak büyük verilerde kopyalama maliyeti artar.
[]Varsayılan Değerler: Değer tipleri 0, false gibi boş değerler alırken; referans tipleri varsayılan olarak null (hiçlik) değerini alır.
[]Yaşam Süresi: Stack'teki veriler metot bittiğinde anında silinir. Heap'teki veriler ise Garbage Collector (Çöp Toplayıcı) tarafından uygun zamanda temizlenir.
4. "Stack Overflow" Nedir? Neden Olur?
Hazır Stack konusuna girmişken meşhur "Stack Overflow" hatasına da değinelim. Stack alanı oldukça sınırlıdır. Eğer sonsuz bir döngüye giren metot çağrıları yaparsanız (Recursive fonksiyonlar gibi), bu kısıtlı alan dolar ve uygulama çöker. Referans tiplerinin bulunduğu Heap ise çok daha geniştir ancak yönetimi daha karmaşıktır.
Altın Kural: Küçük ve basit veriler için değer tiplerini, büyük ve karmaşık nesneler için referans tiplerini kullanın.
Sonuç
Değişkenleri ve belleğin nasıl çalıştığını anlamak, sadece kod yazmanızı değil, yazdığınız kodun neden bazen beklenmedik sonuçlar verdiğini (özellikle dizilerde ve nesnelerde) anlamanızı sağlar. Bir sonraki adımda bu verileri nasıl kontrol edeceğimizi, yani "Karar Yapılarını (If-Else)" inceleyeceğiz.