Generic metotlar
- C# kursu
- Orta seviye
- Ders 71/116
- 5 dk
Generic metot tanımlamayı ve tür argümanıyla çağırmayı öğrenirsin.
Generic metot
Sadece sınıflar değil, metotlar da generic olabilir. Bir generic metot, kendi tür parametresini metot imzasında taşır. void Swap<T>(ref T a, ref T b) yazısı, Swap metodunun herhangi bir türle çağrılabileceğini söyler.
Çağrıda türü açıkça verebilirsin: Swap<int>(ref x, ref y). Veya derleyicinin argümanlardan çıkarmasına izin verirsin: Swap(ref x, ref y). Buna tür çıkarımı (type inference) denir. Generic metotlar, her tür için ayrı yazım yapmadan kod tekrarını önler.
ref ile başvuru geçir
Swap örneğinde ref anahtar kelimesi parametrenin başvuru ile geçmesini sağlar. Yani metodun içindeki değişiklik çağıran tarafta görülür. Değere göre geçişte (default) değişiklik kaybolurdu.
Generic metot, ref T yazımını da destekler. Çağrıda da ref yazmak zorunludur: Swap(ref x, ref y). Bu, hem tanım hem çağrı tarafında açıkça başvuru geçişi istendiğini belirtir. Yanlışlıkla değer geçişi yapmanız engellenir.
Uygulama Swap<T> metodunu yaz
Program sınıfına static void Swap<T>(ref T a, ref T b) metodunu ekle. Gövdede T temp = a; a = b; b = temp; ile yer değiştir. Main içinde int x = 1, y = 2; tanımla; Swap<int>(ref x, ref y) çağır; x ve y'yi Console.WriteLine ile yaz.
Başlangıç kodu
using System;
class Program
{
// Swap<T> generic metodunu yaz
static void Main()
{
// İki int'i Swap ile değiştir, sonucu yazdır
}
}Örnek çözüm
using System;
class Program
{
static void Swap<T>(ref T a, ref T b)
{
T temp = a;
a = b;
b = temp;
}
static void Main()
{
int x = 1, y = 2;
Swap<int>(ref x, ref y);
Console.WriteLine(x);
Console.WriteLine(y);
}
}Beklenen çıktı
2 1
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Generic metot parametresi
static void Swap<____>(ref T a, ref T b) { }
static void Swap<T>(ref T a, ref T b) { }
Açıklama: Swap<T> imzası T parametresini taşır.
2 Swap<int>(ref x, ref y) çağrısından sonra ne olur?
int x = 1, y = 2;
Swap<int>(ref x, ref y);- x=2, y=1 (yer değiştirir) Doğru cevap
- x=1, y=2 (değişmez)
- Derleme hatası
- Çalışma zamanı hatası
Açıklama: ref ile geçirilen değerler metod içinde değişir.
3 Generic metot parçasını eşle
| Kavram | Anlamı |
|---|---|
<T> |
Metot tür parametresi |
ref |
Başvuru ile geçiş |
Swap<int>(...) |
Açık tür çağrısı |
Swap(...) |
Tür çıkarımlı çağrı |