31 Mayıs 2014 Cumartesi

C# ref out keywords...

Merhaba, bu yayınımda C# kullanıcıları için ref ve out anahtar kelimelerine açıklık getirmeye çalışacağım. Bilindiği üzere C# ta temel olarak iki adet veri türü vardır. Bunlar değer(value) veri türleri ve referans(reference) veri türleridir. Örnek gösterirsek eğer int, double, boolean, struct, enum tipleri değer değer türü; string , class, object, delegate örnekleri de birer referans türleridir. Değer türünde olan bir değişken herhangi bir ifade içinde kullanılırsa o değişkenin yeni bir kopyası oluşmuş olup o an kullanılan değişken haline gelecektir. Yani kullandığımız değişken bizim düşündüğümüz değişken değil bir kopya olmuş olacaktır. O ifadeden ayrıldığımızda (bu ifade bir fonksiyon olabilir) ve değişkeni yeniden kullandığımız zaman kopya değil de orjinal değişken olduğunu bilmeliyiz. Bunu bir örnekle de açıklayacağım.



Örneğe bakarsak eğer iki tane değer tipi olan değişkenlerimizin değerleri gönderildikleri fonksiyonda değiştirilip tekrar bu değişkene atanıyor. İşte tam burada aslında fonksiyonun içindeki değişkenin bir kopya olduğunu anlayabiliyoruz. Çünkü değişen değer fonksiyona gönderilen değişkenin değeri olmuyor, kopya değişkenin değeri oluyor. Bu bağlamda bir değer tipinin değerini nasıl bir fonksiyon yardımıyla değiştirebileceğimiz sorusu akla gelebilir. Burada da yardımcı olan anahtar kelimemiz ref oluyor. Örneğini gösterirsem eğer;

  
Görüldüğü üzere değerler değişti, bir kopya yaratılmadı. Yalnız burada dikkat edeceğimiz husus fonksiyonla gönderdiğimi değerleri yine ref anahtar kelimesiyle göndermek gerektiğidir. Ayrıca gönderilen değişkenlerin  mutlaka bir değer atamasına sahip olması gerektiğini unutmayalım.
Şimdi out keywordunun amacından bahsetmeye gelelim. Out anahtarı aslında ref anahtar kelimesiyle neredeyse tamamen aynıdır. Tek farkı ilk değer atamasının olması zorunlu değildir. Çünkü bu değer gönderileceği metot içinde belirlenecektir. 


Görüldüğü üzere değer tiplerinin değerlerini bu anahtar kelimelerle bu yöntemi izleyerek değiştirebildik. Bu konuda anlatacaklarım bu kadar, kendinize iyi bakın.

Hiç yorum yok:

Yorum Gönder