Reference Types & Value Types

int,boolean,enum,double,decimal gibi değişkenler Value Type’dır
Classlar,string,interface’ler,abstract class’lar ise Reference Type’dır
Value typelar bellekte tek yerde tanımlanırlar sadece değer atama mantığı vardır
Reference Type’ların ise bellekte ismi bir yerde datası yani içeriği(referansı) başka bir yerde tutulur

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ReferenceAndValueType
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
             * int,boolean,enum,double,decimal gibi değişkenler Value Type'dır
             * Classlar,string,interface'ler,abstract class'lar ise Reference Type'dır
             * Value typelar bellekte tek yerde tanımlanırlar sadece değer atama mantığı vardır
             * Reference Type'ların ise bellekte ismi bir yerde datası yani içeriği(referansı) başka bir yerde tutulur**/

            //Value Types
            int number1 = 10;
            int number2 = 20;
            number2 = number1;
            number1 = 30;
            //value type'larda olay değer ataması üzerinden gider. değişkenin referansı tutulmaz
            Console.WriteLine(number2);

            //Reference Types
            string[] cities1 = new string[] { "Kayseri", "Konya", "Kütahya" }; //Referans tip bir değişken oluşturduk dolayısıyla cities1 için bellekte değişkenin kendisini (ismini) tutan bir yer var bir onun referansını değerlerii tutan yer var.
            string[] cities2 = new string[] { "Samsun", "Sakarya", "Sivas" };
            cities2 = cities1; //cities2'nin referansına cities1'in referansını ata. Yani cities1 ve cities2'nin referansları bellekte {"Kayseri","Konya","Kütahya"} string dizisini tutan yer oldu. Dolayısıyla cities2nin önceki referansını tutan kimse kalmadı. Garbage collector bu sahipsiz referansı bellekten uçuracak
            cities1[0] = "İstanbul";
            Console.WriteLine(cities2[0]);

            Console.ReadLine();


            //Performans problemi
            DataTable dataTable = new DataTable();
            DataTable dataTable2 = new DataTable();
            dataTable2 = dataTable; //Biz iki nesne türetmişiz ama bunların referansını aynı yerde tutuyoruz new'lemek pahallı bir işlemdir
            //Doğru kullanım
            DataTable dataTable3 = new DataTable();
            DataTable dataTable4;
            dataTable4 = dataTable3;
        }
    }
}

Yorum bırakın

WordPress.com'da bir web sitesi veya blog oluşturun

Yukarı ↑

WordPress.com ile böyle bir site tasarlayın
Başlayın