Değer Türü Davranışı

// iki değişken tanımlayalım
 int a = 5;
 int b = 10;

// b değişkenimizi a değişkenimize atayalım.

a = b;

 //b'nin a'ya atanması sırasında stack'te yer alan 10 değeri, stack'te yer alan a değişkenine atanacaktır.

// a ve b 10 değerine sahip olacaklardır.
a = b;
// a değişkenimize 2 değerini atayalım. 
 a = 2;

 Console.WriteLine("a:{0},b:{1}", a.ToString(), b.ToString());

Referans Türü Davranışı

Referans türleri, değer türü davranışının aksine  Stack ve Heap i birlikte kullanır.İlgili nesnenin sahip olduğu değerler Heap alanında tutulur. Nesnenin adresini bir pointer üzerine almadığımız müddetçe pek bir işe yaramayacaktır. (Eğer anlık, tek bir üye çağrısı yapmayacaksak)

Örneklemeye başlayalım;
Kendimiz ait bir Nesne (class) oluşuralım.

class Personel
    {
        public int PersonelID;
        public string AdSoyad;

        public Personel(int personelId, string adSoyad)
        {
            PersonelID = personelId;
            AdSoyad = adSoyad;
        }
    }

şimdi Main bloğumuzu yazalım.

 static void Main(string[] args)
        {
           

            #region Referans Türü Davranışı Alıştırma I
            // 2 tane Personel Sınıfımızdan ps1, ps2 nesnemizi oluşturalım.
            Personel p1 = new Personel(1, "A");
            Personel p2 = new Personel(2, "B");
            // ps1 nesnemize ps2 nesnemizi atıyoruz. Bellek alanında ki davranışı ise ; Stack bölgesinde ps2 nesnemiz ps1 nesnemize kopyalanmaktadır. Heap Alanında ise p2 nesnemizin değerleri p1 e referans gösterecektir.
            p1 = p2;
           
        // p1 nesnemizin AdSoyad alanını değiştirdiğimiz anda karşımıza yukarıda belirtmiş olduğum Stack ve Heap alanındaki eşleştirmelerden kaynaklı olarak sürekli 2 nesnemizin tüm alanları hem yazdığımızda hem okuduğumuzda bir birine eşit olacaktır.  Şimdi p1 nesnemizin AdSoyad Alanına "C" değerini atayalım. 
            p1.AdSoyad = "C";

            Console.WriteLine("p1 : {0}", p1.AdSoyad);
            Console.WriteLine("p2 : {0}", p2.AdSoyad);

            #endregion

            #region Referans Türü Davranışı Alıştırma II
            Personel prs, prs2 = null;
            prs = prs2;
            prs2 = new Personel(0, "Test");
            prs = new Personel(prs2.PersonelID, prs2.AdSoyad);
            
            Console.WriteLine("prs bilgileri:");
            Console.WriteLine("ID:{0},AdSoyad:{1}", prs.PersonelID.ToString(), prs.AdSoyad);
            Console.WriteLine("************************************");
            Console.WriteLine("prs2 bilgileri:");
            Console.WriteLine("ID:{0},AdSoyad:{1}", prs2.PersonelID.ToString(), prs2.AdSoyad);
            #endregion
        }