C#

C# ref ve out Parametreleri

refout

Merhaba, bu yazımda parametreleri daha etkin kullanmak için pratik yollardan olan ref ve out parametrelerden bahsedeceğim.

ref

Normal bir kullanımda parametrelerde yaptığımız değişiklikler argümanları etkilemiyor. Örneğin;

Yukarıdaki örnekte Kare() metoduna “a” argümanını gönderip aktardığı değerle işlem yaptırdık. Ve daha sonra “a” değişkenini ekrana yazdırdık. Ancak metodu çağırdıktan sonrada öncede sonuç değişmedi. Çünkü biz “a” argümanının yalnızca değerini gönderdik. Ama referansını aktarmadık. Bu yüzden yaptığımız işlem yalnızca “i” parametresini ilgilendiriyor. Eğer argümanın gönderdiğimiz metotta kendi referansı ile işlem görmesini istiyorsak imdadımıza ref anahtar sözcüğü yetişiyor. Aynı işlemi ref olmadan da yapabiliriz fakat işler daha karmaşık hale geldiğinde zorluk yaşamamak için ref kullanımını daha mantılı olacaktır. ref parametresi kullanımında önemli bir nokta var. ref olarak aktarılacak bir argümana çağrıdan önce değer atanmalıdır. ref kullanarak bir argümana ilk değer atanması mümkün değildir. Şimdi yukarıdaki işlemin biraz daha karmaşığını ref ile yapalım.

Görüldüğü gibi ref parametresini kullandığımız zaman “a” parametresinin değeri alan i argümanında yapılan değişiklik “a” parametresini de etkiledi. Yani a’nın hem değerini hem referansını i’ye aktarmıştır olduk.

out

out anahtar sözcüğü iki veya daha fazla geriye döndürmek istediğimizde kullandığımız bir anahtar sözcüktür. ref parametresi de aynı işlemi gerçekleştirebilir. Ancak iki önemli nokta var;

a) out parametresi ilk değer atamasına gerek duymaz. Bu iyi bir özellik, yani sadece geriye değer döndürmek için kullanılır.

b) Metot sonlanmadan out parametresine değer atamak zorundayız, çünkü ilk değer vermediğimiz için herhangi bir değere sahip değil.

Sonuç olarak birden fazla değer döndürme ihtiyacı duyduğumuz zaman out parametresi işimize yarayacaktır. Örnek olarak bir out parametresi kullanımına bakalım.

Burada “b” argümanı ile değeri gönderip, sayi parametresi değerimizi döndürüyoruz. Eğer ref parametresini kullanmış olsaydık “b” argümanınına ilk değer atamak zorunda kalacaktık.

Konuyu kısaca özetlersek argümanlarımız ile daha esnek işlemler yapabilmek, birden fazla değer döndürebilmek gibi işlemleri ref ve out ile kolayca yapabiliyoruz. Umarım faydalı bir yazı olmuştur. Herkese iyi bayramlar 🙂

İstanbul’un amatör seyyahı. Kod yazmak hayat felsefesi. Android, Java, C# ve Javascript’le yakından, tüm teknoloji dünyasıyla uzaktan ilgileniyor. Drone meraklısı ama sahibi değil.
  • Ahmet

    Merhaba,

    Ufak bir hatırlatma yapmak istedim. Else if(i%5==0 ) yerine if(i%5==0) olması gerekiyor. Bu şekilde 3′ e bölünmeyip 5′ e bölünenler bulunuyor çünkü.

    Teşekkürler.

    • Teşekkürler uyarınız için, gerekli düzeltmeyi yaptım.