
Değer Ve Referans Tipleri / Form Dersleri -3
Bu kısımda değer ve referans tiplerine değinmeyi düşündüm. İlk olarak bir objenin sınıfını belirledik. Bu obje çalıştığında RAM bellekte iki tür şekilde bir depolama şekliyle geçecektir. Bu bizim verdiğimiz değer ve referans olarak ikiye ayrılır.Değer ve referans tipleri için bir RAM belleğin yapısını ikiye ayıracak olursak ikiye bölmek sizin anlamanıza yardımcı olacaktır.
Değer Ve Referans Tipleri Nelerdir?
Değerlerimiz yani İngilizce ifadesiyle value tiplerimiz STACK denilen kısımda barındırılıyor. HEAP kısmında ise bizim belirlediğimiz referans tipleri bulunmaktadır.
Basit bir örnekte eğer ki ben bir değer belirledi isem ve class kavramında bir çalışma işlemi yapmış olmaz isem örneğin bir string ifadesine ben eğer “bisiklet” diye bir ifade atayacaksam değer RAM belleğinin STACK kısmında tutulmaktadır.
Bu ifadeler stack kısmında tahsis edilen RAM belleği kısmında kalmaktadırlar. Örneğin aşağıdaki gibi bir kod vereceksem bizim verdiğimiz ifadeyi desteklemiş olurum.
Referans da eğer ki bir ifadeyi ilk önce kopyalayıp onu kullanacak isem o ifade artık bağımsız olarak bir önce işlenmiş ifadenin klonu olarak devam eder.
1 2 3 4 5 |
// Referans ve Değer Tipleri / Stack & Heap string a = "Bisiklet"; string b = a; label1.Text = a; label2.Text = b; |
Şema biçiminde gösterecek olursam bizim yaptığımız RAM bölmesinde aşağıdaki gibi şekillenecektir.
Burada ilk kopyaladığım ifade a string ifadesi kendi içinde olan değeri b ifadesine atayıp sadece adres değişikliği sağlamaktadır. Yani klonlama fakat adresi ayrı bir biçimde.
Bu örnekte olduğu değer biçiminde verdiğimiz ifadeler hep RAM bölgesinde tahsis edilen kısımlarda depolanır.
Peki, bu STACK kısmında yer alabilenler nelerdir?
- String değişkenler
- İnteger değişkenler
- Double değişkenler
- Enum ifadeleri
- Struck
- ….. (Çoğaltılabilir)
Bir örnek daha yapıp değer ve referans tiplerini daha şekillendireceksek bizimi kodlamamıza bir sınıf ekleyip devam edeceksek bu durumda bizim bir alt kadememiz olan HEAP bölgesine eleman atamış olacağız.
Biraz daha açarsak, yani bir klas oluşturduğunuzda o klas RAM bölgesinin STACK kısmında adresleme yapar ve bu adreslemede sizin o klasa attığınız ifadeler barındırır. Bu klasın elemanlarının değerleri de HEAP bölgesinde barındırılır.
Yani söyle diyecek olursak;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// Referans ve Değer ifadeleri class İkitekerlekli { public string Türü { get; set; } public string Markası { get; set; } public int Fiyatı { get; set; } public string Modeli { get; set; } } private void Form1_Load(object sender, EventArgs e) { İkitekerlekli arac1 = new İkitekerlekli(); arac1.Türü = "Motosiklet"; arac1.Modeli = "Küçük"; arac1.Fiyatı = 10000; İkitekerlekli arac2 = new İkitekerlekli(); arac2 = arac1; // Referans iafdesi } |
Değer Ve Referans Tiplerini Neden Kullanırız?
Peki, asıl soru olarak neden biz HEAP ve STACK yani değer ve referans tiplerine ihtiyaç duyuyoruz? Ve referans tipleri ne işimize yarar?
Bu kısımlar biz bizim için bir alan tasarrufu ve tek elden yönetim sağlar. Şöyle ki bir veri oluşturacaksanız bir milyar tane kişilik bir veri, bu veri sizin için kopyalanması ve dağıtılmasına hem engel olmak için hem de dağıtıma çıktığı vakit sizin kopyalamanıza gerek kalmadan kullanıma sunmayı esas almıştır. Örneğin ticari bir sitede referans alma hayatidir. Düşünün tüm 1 milyon ürünün güncellemesinin yapacak adam, bunun için dünya kadar gayret sarf edeceğine referans alıp o değerde indirim veya değişimi daha kolay yapabilmeyi kolaylaştırmak için kullanır.
Yani bir şirkette patron ve çalışanlar aynı veriyi kullanır ve böylelikle kullanılan alan az olur, tek elden yönetim bulunur.
Değer ve referans tipleri bizim için ve çoklu veri ile uğraşan kişiler için hayatidir.