C# Ref ve Out Anahtar Sözcüklerinin Kullanımı




Ref Anahtar Sözcüğü

Değer tipleri(int, double, byte vs.) metotlara kopyalanarak geçirilirler yani değişkenin birebir yeni bir kopyası oluşturulur. Ancak bazı durumlarda değer tiplerini de referansları ile metotlara geçirmek isteyebiliriz. Bu durumda ref anahtar sözcüğünü kullanarak bunu gerçekleştirebiliriz. ref anahtar sözcüğü değer türlerinin metotlara referans yolu ile geçirilmesini sağlar. Referans türleri zaten referans yolu ile geçirildiği için bu türler için ref anahtar sözcüğünü kullanmak gereksizdir. Ancak kullanımı tamamen geçerli kılınmıştır.Burada dikkat edilmesi gereken nokta ref ile tanımlanan metodu çağırırken yine ref çözçüğü kullanılması gerekmektedir. ref sözcüğünün kullanımı ile ilgili diğer bir önemli nokta ise ref ile kullanılacak değişkenlere mutlaka değer atanmış olma zorunluluğudur. Herhangi bir değer verilmemiş değişkeni ref ile de olsa kullanamayız. Şimdi bir örnekle ref kullanımına bakalım :



public struct Coordinate //Value Type
{

    public int x;
    public int y;
}
public class EntryPoint //Reference Type
{
    public static void AttemptToModifyCoord(Coordinate coord)
    {
        coord.x = 1;
        coord.y = 3;
    }
    public static void ModifyCoord(ref Coordinate coord)
    {
        coord.x = 10;
        coord.y = 10;
    }
    static void Main()
    {
        Coordinate location;
        location.x = 50;
        location.y = 50;
        AttemptToModifyCoord(location);
        System.Console.WriteLine("( {0}, {1} )", location.x, location.y);
        ModifyCoord(ref location);
        System.Console.WriteLine("( {0}, {1} )", location.x, location.y);
    }
}
 bu programın çıktısı şu şekilde olacaktır :

( 50,50 )
( 10,10 )
buradanda anlaşıldığı gibi ilk metodumuz olan AttemptToModifyCoord metoduna gönderilen ve değer tipi olan location struct'ının bir kopyası oluşturulup gönderildiği için main metodunun içinde tanımlanan location'una bir etkisi olmamıştır. Ama bu değer tipini ref ile ModifyCoord metoduna gönderdiğimizde ise bunun bir kopyasını değil nesnenin adresine giderek kendisini referans almıştır. Bu durumda ModifyCoord metodunun yaptığı değişiklik main metodunun içerisindeki location değer tipini etkilemiş ve x,y'nin değerini 10 yapmıştır. Yani kısacası ref değer tiplerini referans yolu ile aktarır.

Out Anahtar Sözcüğü

Out anahtar sözcüğünün kullanımının ref anahtar sözcüğünün kullanımından bir farkı yoktur. Out'ta değer tipini referans yolu ile aktarır tek farkı ref kullanımında olduğu gibi ilk değer atamasının yapılması zorunluluğunun olmamasıdır. Yukarıdaki örneği aynen out'la yazabiliriz. Sadece bu sefer main metodu içerisinde yaptığımız ilk değer atamasına bu durumda gerek kalmayacaktır.


0 yorum :

Yorum Gönder