C# - Değer ve Referans Tipler Mantığı

Bu konuyu okuyanlar

Samet UCA

Müdavim
Katılım
3 Ağustos 2012
Mesajlar
3,277
Reaksiyon puanı
2,912
Puanları
113
Bir programcının kesinlikle bilmesi gereken bu tip yapıları size burada en sade dil ile anlatmaya calışacağım.
Değer ve referans tipler bir programlama dili öğrenilirken es geçilen konulardır. Oysaki işe alımlarda bir çok firma bu konuda programcının bilgisini sınamakta.
Elimizde ki dil ile uygulama geliştirirken bu yapıları bilmek daha iyi algoritma kurmamızı sağlayabilir.
Eğer yazılım alanında kariyer düşünüyorsanız bu yapıları bilmek şarttır.
Bu yapıların ne olduğunu anlatmadan önce temelini oluşturmamız gereken bir yapı var. Bellek.

1.png

Burada 2 yapı görüyoruz. Bir değişken tanımlandığında yada bir referans tip tanımlandığında bellekte 2 alanda işlenir.
Eğer basit bir değişken denklare ediliyorsa stack tarafında tutulur.
C#:
int deger = 13;
Bu değer tipinde olduğu için stack tarafında yer edinir.
Peki şöyle bir tanımlama yapsaydık?
C#:
int deger2 = deger;
Bu tanımlamada görüldüğü gibi deger değişkeninin içerisindeki değeri deger2 değişkenine atıyoruz. Gayet basit.
Böyle bir durumda da sadece stack tarafı çalışacaktır.
Peki nedir bu referans tipler?
Referans tiplere bir örnek verelim;
Diziler bu örneğimize uygun olabilir. Şimdi bir dizi tanımlayalım.
C#:
string[] Sehirler1 = new string[]{"istanbul","izmir","ankara"};
Referans tipleri new keyword ile tanıyabiliriz. Bir değeri new yaptığınız anda aslında referans tip oluşturuyorsunuz. Peki referans tipler ile değer tipler arasında ki fark nedir?
Yukarıda ki diziyi tanımladığınızda oda biraz önce anlattığım değer tipler ile aynı yerde yani stack tarafında yer alır.
Ancak diziye bir referans numarası atanır örnek "102". Dizinin içerisindeki değerlerde heap kısmına atılır.
2.png

Burası çok önemli.
Değer tiplerinde eşitleme yaptığımızda "bak kardeşim senin değerin artık şu değişkende ne yazıyorsa o. Ama gittiğinde o an ne yazıyorsa o. Yani sonrasında o kendisini değiştirirse sen değişme"
Referans tiplerde eşitleme ise "bak kardeşim senin referans numaran artık 102 ben seni çağırdığımda veya sende bir değişiklik yapacağım zaman bellekteki 102 numarada ne varsa orayı işleyeceksin." gibidir.
C#:
Sehirler2 = Sehirler1
Yukarıda aynı örneği vermiştim ama bu değer tip değil referans tip. Dolasıyla sehirler2 değerini şehirler1'e eşitlemediniz. Tamamen şehirler2 nin referans numarasını şehirler1 e gönderdiniz. Yani,
3.png

Böyle bir duruda
C#:
Sehirler2[0]
indexini yazdırmak istediğinizde ankara yerine istanbul değerini göreceksiniz.

Bu konuyu sade bir şekilde anlatmaya çalıştım. Umarım faydalı olur.
Alıntı değildir. SDN için hazırlanmıştır.
 
Son düzenleme:
Üst