CodeBlanks Logo Icon CodeBlanks

Generic metotlar

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

Program.cs
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

Program.cs
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

Soru
static void Swap<____>(ref T a, ref T b) { }
Cevap
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?

Program.cs
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ı

Orta seviye bölümündeki tüm dersler