Value Type ve Reference Type C#

Değişken türleri:  “int”, “long”, “float”, “double”, “decimal”, “char”, “bool”, “byte”, “short”, “struct”, “enum”

Referans türleri:  “string”, “object”, “class”, “interface”, “array”, “delegate”, “pointer”

Bunları örnekle açıklayalım :

class Program
    {
        static void Main(string[] args)
        {
            int number1 = 10;
            int number2 = 20;
            number2 = number1;
            number1 = 30;

            Console.WriteLine(number1);
            Console.WriteLine(number2);
            Console.ReadLine();
        }
    }

output :

Yukarıdaki koddaki değişkenlerin hiçbir referansı tutulmaz tamamen değer üzerinde gider. number2’nin değeri number1’in değerine eşitlenmiştir. Bu nedenle number2 = 10 olacaktır.

static void Main(string[] args)
{
    string[] cities1 = new string[] { "Ankara","Adana","Afyon"};

    string[] cities2 = new string[] { "Bursa", "Bolu", "Balıkesir" };

      cities2 = cities1;

      cities1[0] = "İstanbul";

      Console.WriteLine(cities2[0]);


      Console.ReadLine();
}

Yukarıdaki kodda array kullanılmıştır ve array’ler referens tiptir. Değişkenin tipini tutan bir yer bir de o değişkenin değerini(referansını) tutan başka bir yer vardır. string[ ] cities1 ve new string[ ] { “Ankara”,”Adana”,”Afyon”}. cities2′ nin referansı cities1’in referansına eşittir.Cities2 değerini tutan bir değişken olmadığı için garbage collector dediğimiz çöp toplayıcı onu bellekten silecektir.cities1[0] elemanını değiştirip cities2[0] elemanının hangi değeri döndüğüne bakarsak :

Bu konuda sık yapılan hatalardan birine bakalım :

public void Method()
{
   DataTable dataTable1 = new DataTable();
   DataTable dataTable2 = new DataTable();
   dataTable2 = dataTable1;
           
}

iki farklı dataTable nesnesi oluşturulmuş ve dataTable2’nin referansı dataTable1 olarak atanmıştır. Bu durunda dataTable2 nesnesini new’lemenin bir anlamı kalmamıştır.New’lemek pahalı bir olaydır. Bu nedenle aşağıdaki gibi yapılması daha mantıklıdır.

public void Method()
{
   DataTable dataTable1 = new DataTable();
   DataTable dataTable2;
   dataTable2 = dataTable1;
           
}

Son durumda DataTable tipinde oluşturulan dataTable2 değerine dataTable1’in referansı atanmıştır. new’lemeye gerek yoktur.

Yorum bırakın