Değer ve Referans Tipleri
Yazan : Yusuf Nar, Nisan 12, 2007, Perşembe 14:52
Etiket(ler) : c sharp, değer tipleri, referans tipleri, reference types, value types
C Sharp'ta veri tipleri ikiye ayrılır.
- Değer Tipleri : Değer tipleri bildiğimiz temel tipleri içerir. char, int, folat gibi. Ayrıca enum ve struct tipleri de birer veri tipidir.
- Referans Tipleri : Referans tipleri class(sınıf), interface(arayüz), delegate ve array(dizi) tiplerini içerir.
Değer Tipleri ve Referans Tipleri Arasındaki Fark
Değer tipi ve referans tipleri arasındaki temel fark şudur; değer tipindeki bir değişken direk kendisi sahip olduğu bilgiyi, veriyi içerir. Referans tipindeki bir değişken ise gösterdiği bilgiye, veriye ilişkin bir referans tutar. İki referans tipindeki değişkenin aynı objeyi referans etmesi mümkün olduğundan biri üzerindeki işlemler diğerinin gösterdiği veriyi de etkileyecektir. Fakat iki aynı değer tipindeki değişken kendi verilerine sahiptirler ve her biri kendi kopyası üzerinde değişiklik yapabilir.
Örnek Uygulama
C Sharp'ta veri tipleriyle ilgili örnek uygulamayı buradan indirebilirsiniz.
Buradaki anlatımları okumadan önce örnek uygulamayı indirmeniz, çalıştırmanız ve incelemeniz daha faydalı olacaktır.
İlk butona tıkladığınızda bu butonun yapmış olduğu işlevleri göreceksiniz. Burada iki ayrı değer tipinin birbirine atandığını, daha sonra y değişkenine farklı bir değer verildiğini ve bu değişkenlerin sonuçlarının MessageBox sınıfı ile ekranda gösterildiğini görmekteyiz.
int x;
x = Convert.ToInt32(txtDeger.Text);
int y;
y = x;
y = 999;
MessageBox.Show("x'in değeri : " + x.ToString()
+ ", y'nin değeri : "+ y.ToString(), "Değer Tipleri");
Sonuç olarak x ve y değer tipinde değişkenlerdir ve y değişkenine 999 atandığında x değişkeninin 0 olan değeri değişmez.
İkinci butonun arkasında çalışan koda baktığımızda ise kendi oluşturduğumuz Test tipindeki bir sınıfın kullanıldığını görmekteyiz. Test sınıfında tanımlanan iki değişkenin birbirine atandığını ve test2 isimli değişkenin üye değişkeni olan x değerinin değiştirildiğini görmekteyiz. Gerçekte ise test2 değişkenine test1 değişkeni atanmasıyla aslında bellekte tek bir objenin yani aynı objenin ikinci bir referansını tanımlamış oluyoruz.
Test test1 = new Test();
test1.x = Convert.ToInt32(txtReferans.Text);
Test test2;
test2 = test1;
test2.x = 999;
MessageBox.Show("test1 objesinin değeri : "
+ test1.x.ToString() + ",
test2 objesinin değeri : "
+ test2.x.ToString(), "Referans Tipleri");
Sonuç olarak test2 değişkeninin x elemanı değiştiğinde aslında test1 değişkenin x elemanını değiştiriyoruz. Her ikisinin de değerinin 999 olduğunu görmekteyiz.