Giriş: Bellekte Ne, Nasıl Saklanıyor?
C# dilinde veri türlerini anlamak sadece doğru kod yazmak için değil, bellek yönetimini verimli yapmak için de hayati önem taşır. "Değer" ve "referans" tipleri arasındaki farkı bilmek, özellikle performans ve davranış farklarının kritik olduğu uygulamalarda doğru kararlar almanızı sağlar.
Bu yazıda değer tipleri ile referans tipleri arasındaki farkları, nasıl çalıştıklarını ve hangi durumlarda hangisini tercih etmeniz gerektiğini sade ve örnekli şekilde anlatıyoruz.
1. Değer Tipleri Nedir?
Değer tipleri, verinin kendisini bellekte saklayan değişken türleridir. Atandıklarında, orijinal değerin bir kopyası oluşturulur.
Yaygın Değer Tipleri:
-
int
,double
,char
,bool
,float
,decimal
,struct
,enum
Örnek:
int x = 10;
int y = x;
y = 20;
Console.WriteLine(x); // Çıktı: 10
x
vey
birbirinden bağımsızdır.y
değişse bilex
etkilenmez.
2. Referans Tipleri Nedir?
Referans tipleri, verinin kendisini değil, verinin bulunduğu adresi (referansı) saklar. Bu tipler, bellekteki aynı nesneye işaret ettiklerinden dolayı birinde yapılan değişiklik diğerini de etkiler.
Yaygın Referans Tipleri:
-
string
,array
,class
,object
,interface
,delegate
Örnek:
int[] dizi1 = { 1, 2, 3 };
int[] dizi2 = dizi1;
dizi2[0] = 99;
Console.WriteLine(dizi1[0]); // Çıktı: 99
dizi1
vedizi2
aynı adresi işaret ettiği için değişiklik her ikisini etkiler.
3. Temel Farklar Tablosu
Özellik | Değer Tipi | Referans Tipi |
---|---|---|
Saklanan veri | Değerin kendisi | Bellek adresi |
Atama sonrası ilişki | Bağımsız | Ortak |
Bellek kullanımı | Stack (yığın) | Heap (yığın dışı) |
Performans | Genellikle daha hızlı | Nesne karmaşıklığına göre değişir |
4. Ne Zaman Hangi Tipi Kullanmalıyız?
✅ Basit veri işlemlerinde — Değer tipi
✅ Karmaşık veri yapıları, nesne modellemelerinde — Referans tipi
Eğer bir değişkenin her kopyasının ayrı ayrı saklanmasını istiyorsanız, değer tipi tercih etmelisiniz. Ancak, aynı veri üzerinde farklı yerlerden işlem yapmak istiyorsanız, referans tipi daha uygundur.
5. Dizi Üzerinden Davranışı Anlamak
int[] array1 = { 1, 2, 3 };
int[] array2 = array1;
array2[0] = 100;
Console.WriteLine(array1[0]); // 100
Çünkü diziler C#’ta referans tipidir.
array1
vearray2
aynı nesneyi işaret eder.
Sonuç: Tipi Bil, Belleği Yönet!
Değer ve referans tipleri, veri saklama ve davranış farkları açısından oldukça önemlidir. Kodunuzu daha performanslı ve hatasız yazmak istiyorsanız, bu iki kavramı net bir şekilde anlamalısınız.
🎥 Videolu anlatım ve örnek uygulama için:
👉 C# Ders 31: Değer Tipleri ve Referans Tipleri