CodeBlanks Logo Icon CodeBlanks

Generic metotlar

C# kursu · Orta seviye · Ders 71/116

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.

Örnek çözümü göster
static void Swap<T>(ref T a, ref T b) { T temp = a; a = b; b = temp; } yaz. Main'de int x = 1, y = 2; Swap<int>(ref x, ref y); Console.WriteLine(x); Console.WriteLine(y); ekle.
Ö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);
    }
}

Kendini test et

  1. Generic metot parametresi

    static void Swap<____>(ref T a, ref T b) { }
    Cevabı göster
    static void Swap<T>(ref T a, ref T b) { }
  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=1, y=2 (değişmez)
    • x=2, y=1 (yer değiştirir)
    • Derleme hatası
    • Çalışma zamanı hatası
    Cevabı göster

    x=2, y=1 (yer değiştirir) — Doğru. ref ile geçirilen değerler metod içinde değişir.

  3. Generic metot parçasını eşle

    <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