crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
C# Metotlar: Parametre Yönetiminde ref, out ve params Kullanımı
Metotlar, belirli bir işi yapmak için paketlenmiş kod bloklarıdır. Çoğu zaman metotlara veri gönderir ve onlardan sonuç bekleriz. Ancak bazen veriyi sadece göndermek yetmez; gönderdiğimiz verinin orijinalini değiştirmek veya belirsiz sayıda veriyi tek seferde iletmek isteriz. İşte burada C#'ın özel anahtar kelimeleri devreye girer.
1. Değer ve Referans Yoluyla Gönderim
Varsayılan olarak, C#'ta değer tipleri (int, bool, double vb.) bir metoda gönderildiğinde o değerin bir kopyası oluşturulur. Metot içinde yapılan değişiklikler orijinal değişkeni etkilemez.
ref Anahtar Kelimesi
ref (reference), bir değer tipini metoda "kopyasıyla" değil, "adresiyle" göndermemizi sağlar. Böylece metot içindeki değişiklik, orijinal değişkeni de değiştirir.Kural: ref olarak gönderilecek değişkenin, metoda girmeden önce mutlaka bir başlangıç değeri (initial value) almış olması gerekir.
C#:
void SayiyiArtir(ref int sayi)
{
sayi += 10;
}
int asilSayi = 50;
SayiyiArtir(ref asilSayi);
Console.WriteLine(asilSayi); // Çıktı: 60 (Orijinal değer değişti!)
2. out Anahtar Kelimesi
out, mantık olarak ref ile aynıdır; yani veriyi referans olarak gönderir. Ancak kullanım amacı farklıdır. Genellikle bir metottan birden fazla değer döndürmek istediğimizde kullanılır.
Kural: ref'in aksine, out değişkenine metot dışındayken değer atama zorunluluğu yoktur. Ancak metot içinde o değişkene mutlaka bir değer atanmalıdır.
C#:
void Hesapla(int s1, int s2, out int toplam, out int fark)
{
toplam = s1 + s2;
fark = s1 - s2;
}
Hesapla(20, 10, out int t, out int f);
Console.WriteLine($"Toplam: {t}, Fark: {f}");
3. params Anahtar Kelimesi
Bir metoda kaç tane parametre göndereceğiniz belli değilse params imdadınıza yetişir. Bu kelime sayesinde metoda dilediğiniz kadar aynı türden veriyi virgülle ayırarak gönderebilirsiniz. Metot bunu içeride bir dizi (array) olarak karşılar.
Kural: Bir metot imzasında sadece bir tane params bulunabilir ve bu parametre listenin en sonunda olmalıdır.
C#:
int Topla(params int[] sayilar)
{
int sonuc = 0;
foreach (int s in sayilar) sonuc += s;
return sonuc;
}
int sonuc1 = Topla(5, 10, 15); // 3 parametre
int sonuc2 = Topla(1, 2, 3, 4, 5, 6, 7); // 7 parametre
Özet Karşılaştırma Tablosu
| Özellik | ref | out | params |
|---|---|---|---|
| Başlangıç Değeri | Zorunlu | Zorunlu Değil | Gerekmez |
| Metot İçi Atama | İsteğe bağlı | Zorunlu | Gerekmez |
| Temel Amaç | Mevcut veriyi güncellemek. | Birden fazla sonuç dönmek. | Dinamik sayıda veri almak. |
Modern C# Notu: ref ve out'un Geleceği
C# 7.0 ile gelen "Tuples" özelliği sayesinde artık out kullanımı eskisi kadar popüler değil. Birden fazla değer dönmek için (int, string) Metot() gibi yapılar daha temiz bir kod sunuyor. Ancak ref hâlâ performans kritik (bellek kopyalamasından kaçınmak gereken) yerlerde ve Span<T> gibi modern yapılarda hayati önem taşıyor.
Sonuç
Metotlar kodun düzenini sağlar; ref, out ve params ise o düzenin ne kadar esnek olabileceğini belirler. Özellikle kütüphane geliştirirken veya karmaşık matematiksel hesaplamalar yaparken bu anahtar kelimelerin gücünü kullanmak sizi daha profesyonel bir yazılımcı yapacaktır.