19.09.2015

C# Değer (Value) ve Referans (Reference) Tipleri

Değer (Value) ve Referans (Reference) Tipleri

C# dilinde önceden tanımlanmış (C# dilinde varolan tipler) veri tipleri, değer tipleri ve referans tipleri olmak üzere ikiye ayrılır. Bu iki veri tipi arasındaki farkı çok iyi kavramak gerekir. Daha önce dediğimiz gibi değişkenler, bellekte tutulan verilerdir. Aslında bir değişkeni kullanırken o değişkenin bellekte tutulduğu adresteki veriye ulaşıyoruz. Değer tipleri değişkenin değerini direkt bellek bölgesinden alırlat\J£e£crans tipleri ise başka bir nesneye referansjokfak kullanılırlar. Yanfrefaransjıipleri aslında bir çeşit bellek bölgesi olan heap aitıhında yaratılan vektörlerinin (bunlara kısaca nesne de diyebiliriz) adreslerini saklarlar. Değer tipleri yaratıldıklarında stack dediğimiz bellek bölgelerinde oluşturulurlar, referans tipleri ise kullanımı biraz daha sınırlı olan heap dediğimiz bellek bölgesinde saklanırlar.

C ve C++ dillerine aşina olanların tahmin ettiği gibi gösterici (pointer) kavramı ile referans veri tipleri arasında hiçbir fark yoktur. Fakat C++ dilinde kullanıcının direkt olarak kullanabileceği bir gösterici veri türü tanımlaması yoktur. Bunun yerine bazı değişkenler değer tipleri bazıları ise referans tipleri olarak işlem görürler. Peki bunlar nelerdir? Temel veri tipleri olan int, double, float ve yapı nesneleri gibi veri türleri değer tipleri, herhangi bir sınıf türü ise referans tipidir. İki değer tipi nesnesini birbirine eşitlerken değişkenlerde saklanan değerler kopyalanarak eşitlenir ve bu durumda iki yeni bağımsız nesne elde edilmiş olur yani birinin değerini değiştirmek diğerini etkilemez, ancak iki referans tipini birbirlerine eşitlediğimizde bu nesnelerde tutulan veriler kopyalanmaz, işlem yapılan nesnelerin heap bölgesindeki adresleridir, yani iki nesnede aslında heap bellek bölgesinde aynı adresi gösterecekleri için birinde yapılan değişiklik diğerini de etkileyecektir. Referans tiplerini tanımlarken herhangi bir adresi göstermediğini belirtmek için null değere atanırlar. Mesela:

y = null;

gibi bir tanımlamada y nesnesi null adrese atanmıştır, null adresler bellekte herhangi bir adrese karşılık gelmez.

C# Değer (Value) ve Referans (Reference) Tipleri
Bu makalenin telif hakkı ve tüm sorumlulukları yazara ait olup, şikayetler için lütfen bizimle iletişime geçiniz.
URL:
Etiketler:

Bu makale 5237 kez okundu

19.09.2015 tarihinde yazıldı
Reitix

Yorumlar

  • ilkercan
    20.05.2016

    nullable yani null olabilir ya da olamaz diye bir kavram vardır ve konuya ilişkin verdiğiniz örnekte bilgi verilmesinde fayda görüyorum

  • Sabri86
    04.02.2016

    verinin saklanacağı yeri ve yazılımın performansını etkileyen durumlar olduğunu anlıyorum, teşekkürler

Bu yazıya siz de yorum yapabilirsiniz

İnternet sitemizdeki deneyiminizi iyileştirmek için çerezler kullanıyoruz. Bu siteye giriş yaparak çerez kullanımını kabul etmiş sayılıyorsunuz. Daha fazla bilgi.