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 }
Related posts
Kategoriler
- ASP.NET (1)
- C# (13)
- SQL İpuçları ve Püf Noktaları (1)
- SQL Server (4)
- Uncategorized (1)