Sayfalar

18 Ağustos 2019 Pazar

Ref ve Out Keyword

Parametreler, "ref" yada "out" keywordleri kullanılmadığı sürece,  Değer Tiplerin değerlerini tutarlar.

Örn. number1 adlı değişken, aşağıdaki örnekte Add() metotuna parametre olarak eklenmiş ve metot içerisinde de number1=60 değeri atanmıştır. Add() metotu değer döndükten sonra, number1 ConsoleWriteLine ile ekrana yazdırılmıştır. Görüldüğü üzere number1 adlı değişkenin değeri değişmemiştir.
Peki Neden Değişmedi?
Bunun nedeni Main metotda ki number1 değişkeninin sadece "değeri" (20) parametre olarak yollanmıştır. Sonraki işlemler farklı bir değişken olan Add()metodunun parametresi, üzerinden yapılmıştır.  Add() metodu içesindeki parametre number1 ile Main metot'da tanımlanmış number1 aynı isme sahip olsada farklı iki yer tutarlar.

class Program
{
    static void Main(string[] args)
    {
        int number1 = 20;
        int number2 = 50;
 
        var result = Add(number1, number2);
        Console.WriteLine(result);  // Sonuç 110
        Console.WriteLine(number1); // Sonuç 20
        Console.ReadLine();
 
    }
 
    static int Add(int number1, int number2)
    {
        number1 = 60;
        return number1 + number2;
    }
}

Aynı işlem Ref Keywordü ile yaptığımızda ise, parametre olarak değişkenin kendisini Add() metotuna yollanmış oluruz. Böylelikle metot içerisinde atanan yeni değer number1 değişkenin yeni değeri olur. number1 adlı değişkene ref keywordu ile atanmadan önce mutlaka bir değer atanmış olmalıdır.

class Program
 {
     static void Main(string[] args)
     {
         int number1 = 20;
         int number2 = 50;
 
         var result = Add(ref number1, number2);
         Console.WriteLine(result);  // Sonuç 110
         Console.WriteLine(number1); // Sonuç 60 
         Console.ReadLine();
 
     }
 
     static int Add(ref int number1, int number2)
     {
         number1 = 60;
         return number1 + number2;
     }
 }

"out" keywordünün farkı ise, number1 parametreye geçilirmeden, bu değişkene bir değer atama zorunluluğu yoktur. Fakat ilk kullanıldığı yerde( bkz. Add() metotu) değer atanmalıdır!


static void Main(string[] args)
{
    int number1;
    int number2 = 50;
 
    var result = Add(out number1, number2);
    Console.WriteLine(result);  // Sonuç 110
    Console.WriteLine(number1); // Sonuç 60 
    Console.ReadLine();
 
}
 
static int Add(out int number1, int number2)
{
    number1 = 60;
    return number1 + number2;
}

MVC LOADING TOO SLOW ISSUE