DEV Community

hdemiray
hdemiray

Posted on

C# Değer Ve Referans Tipler Nedir ? Farkları Nelerdir ? / Value And Referance Type What Are The Differences ?

Nesnel programlama büyük ölçüde referans tiplerin üzerine kuruludur.

Referans Tip Çalışma Şekli

Değer tip ve referans tipler bellekte iki ayrı alanda tutulur.
Bu alanlar Stack ve Heap bölümleridir.

Stack: alanında sayısal ifadeler tutulur bunlar değer tiplidir: int,double,decimal,bool(0,1),enum(1,2,3,4,5),stack(sınıflara benzer) tipte yapılar da stack alanında tutulur.

Değer tip sadece tanımlanan sayıda durur.
ÖRN:

int sayi1; Tanımladığı anda stackte tutulur

sayi1=10; Stack te sayi1=10 olarak tutulur
int sayi2=sayi1 Stack te sayi2=10 olarak tutulur ve sayi1 deki değişiklik sayi2 yi etkilemez.

Referans Tipler: class, interface,abstract class, string, diziler, int array de olsa dizide olsa referans tiplidir. Referans tipler newlenenlerdir (stack hariç).

EK BİLGİ: Stringler referans tiplidir ancak çalışma şekli değer tip gibidir.

string[] sehirler;Tanımladığımızda stackte yer tutar.

string[] sehirler = new string[]{"Ankara","İstanbul","İzmir"};
string[] sehirler2 = new string[]{"Adana","Bursa","Bolu"};

İçerisine değer verildiğinde bir numara atanır ve heap bölümünde new string[]{"Ankara","İstanbul","İzmir"}; şeklinde bu numara ile bir referans alanı tutar.

ASIL FARK BU NOKTADA

//bu iki değeri eşitlersek eğer

sehirler2 = sehirler;

bu iki değeri eşitlersek eğer sehirler2 tanımlanırken stackte aldığı numara sehirler dizisinin aldığı değere eşitleniyor ve her ikiside heap bölümünde aynı noktayı referans gösteriyor sehirler2 nin asıl değerine herhangi bir müdahele olmuyor

Bu noktada eğer şehirler 2 de bir alanda değişiklik yaparsak bu şehirler dizisinide etkileyecektir. Çünkü şehirler 2 de artık referans olarak şehirler dizisinin heapteki alanını gösteriyor.

sehirler2[0]= "Eskişehir";
Console.Write(sehirler[0]);

Bu koddan alacağımız sonuç Ankara değil "Eskişehir" olacaktır.

Peki şehirler2 nin başlangıçta gösterdiği referansa ne olacak ?

Garbage Collector dediğimiz nesne
Referansı kalmamış o referansı gösteren hiçbir tanım kalmamışsa
O referansı bellekten silecek yapıdır. Çöpçümüzdür.

Top comments (0)