Merhabalar,
Bu yazımda sizlere C#’da kullanılan ref ve out parametreleri hakkında kısaca bilgi verip, mantığını anlatmaya çalışacağım.
Kullanım amaçları aynı olmasına rağmen, kullanım olarak farklılıkları vardır.
Örnek üzerinden anlatmak gerekirse, elimizde SayiEkle isminde bir metot olsun ve parametre olarak gönderilen sayının üzerine 20 ekleyip bize sonucu versin.
static void Main(string[] args) { int sayi = 30; sayi = SayiEkle(sayi); //Burada SayiEkle fonksiyonu çağrılır ve üzerine 30 ekleyip çıkan sonucu bize return olarak döndür. Console.WriteLine(sayi); } static int SayiEkle(int sayi) { int sonuc = sayi + 20; return sonuc; }
Ref
Değer türlerinin metotlara referans yolu ile geçilmesini sağlar.
Şimdi yukarıdaki işlemi ref kullanarak yapalım.
static void Main(string[] args) { int sayiRef = 30; SayiEkleRef(ref sayiRef); Console.WriteLine(sayiRef); // Sonuç 50'dir. } static void SayiEkleRef(ref int sayi) { sayi = sayi + 20; }
Burada ref parametresi ile gönderdiğimiz değişkeni direkt olarak metodun içinde değiştirebiliyoruz. Eğer ki ref parametresi kullanmadan bu işlemi yapsaydık, sayiRef yine 30 olarak kalacaktı, ama ref kullandığımız için değeri değişti ve yeni değeri 50 olarak belirlendi.
Out
Ref ile aynı görevi yapar. Out‘un farkı değişkene ilk değer ataması yapmak zorunlu değildir. Diğer bir fark ise out ile bildirilen parametrenin mutlaka metot içinde bir değer atamasının gerçekleşmesi zorunludur.
Şimdi aynı işlemi bir de out kullanarak gerçekleştirelim.
static void Main(string[] args) { int sayiOut; SayiEkleOut(out sayiOut, 30); Console.WriteLine(sayiOut); // Sonuç 50'dir. } static void SayiEkleOut(out int sayi, int i) { sayi = i + 20; }
Burada out parametresi ile gönderdiğimiz değişkeni yine aynı şekilde metot içinde yeni değeriyle değiştirebildik. Burada out parametresinin ref‘den farkı out ile kullandığımız değişkenin ilk değerini atamadık, bunu ref kullanımında yapsaydık program hata verecekti.
Ayrıca out kullandığımız için de mutlaka out ile kullandığımız değişkene metot içinde bir değer ataması zorunlu olacaktı, Eğer ki sayi değişkenine bir değer atamazsanız metot hata verecektir.
Konuyu daha iyi anlamak için örnekleri kendiniz de deneyebilirsiniz.
Umarım anlattıklarım anlaşılabilmiştir, görüşmek üzere. 🙂
Gayet güzel bir anlatım çok teşekkürler.