undefined

Merhaba arkadaşlar bugün sizlerle C# dilinde ref ve out anahtar kelimelerini yazacağımız kodlar üzerinden göreceğiz.

Öncelikle basit bir örnek yapalım daha sonrasında bu örnek üzerinden çıkarımlarımızı yapalım.

Ref:

using System;

namespace RefOutKullanimi
{
    class Program
    {
        static void arttirmaIslemi(int count)
        {
            count++;
        }
        static void Main(string[] args)
        {
            int count = 10;
            arttirmaIslemi(count);
            Console.WriteLine(count);
            Console.Read();
        }
    }
}

undefined

Evet arkadaşlar yukarıdaki kodu incelediğimiz zaman bizlere arttirmaIslemi(count); işleminden sonra Console ekranında okunan değer 10 olacaktır. Çünkü arttirmaIslemi(count); fonksiyonun içerisindeki arttırma operatörü int count = 10; üzerine etki etmez. Çünkü stack bölgesine çıkan değerler her defasında kopyalanarak devam edeceğinden birbirlerini etki etmezler. 

Tam olarak burada ref ve out anahtar kelimeleri devreye giriyor. Aşağıdaki kodu inceleyelim.

using System;

namespace RefOutKullanimi
{
    class Program
    {
        static void arttirmaIslemi(ref int count)
        {
            count++;
        }
        static void Main(string[] args)
        {
            int count = 10;
            arttirmaIslemi(ref count);
            Console.WriteLine(count);
            Console.Read();
        }
    }
}

undefined

Yukarıdaki kodu incelediğimizde ekran çıktısı 11 olacaktır. Sebebi ise arttirmaIslemi(ref count); ref anahtar kelimesi kullandığımız için fonksiyon içerisindeki değer bu sefer kendini stack bölgesinde değil heap bölgesinde görür. ve int ile stack bölgesinde oluşturduğumuz değeri heap bölgesine taşır ve değerimiz 11 olur.

Eğer ki dosylarım bu kısımda zorlandıysanız C# Heap and Stack durumlarını araştırıp anlamanız bu ve bundan sonraki C# konularında sizi çok büyük yüklerden kurtaracaktır. 

Out:

using System;

namespace RefOutKullanimi
{
    class Program
    {
        static void arttirmaIslemi(out int count)
        {
            count = 10;
            count++;
        }
        static void Main(string[] args)
        {
            int count ;
            arttirmaIslemi(out count);
            Console.WriteLine(count);
            Console.Read();
        }
    }
}

Out anahtar kelimesi eski .Net framework versiyonlarında bir fark vardı oda Biz değer verdiğimiz int count değişkenine herhangi bir değer ataması yapmadığımız zaman programımız hata veriyordu. .net framework 7.0 ile beraber bu sorun ortadan kalkmıştır.

Heap and Stack:

undefined