Sobes.tech
Junior

C#'ta delege nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Delegat, delegate anahtar kelimesi kullanılarak tanımlanan referans türüdür. Belirli bir imzaya (dönüş türü ve parametre türleri) sahip bir yöntemi kapsüller. Özünde, delegat, güvenli bir yöntem göstericisidir.

Delegatların temel özellikleri:

  • Yöntem kapsülleme: Delegat, referans verdiği yöntem hakkında bilgi tutar.
  • Tür güvenliği: Delegat, yalnızca imzası delegat ile tam olarak eşleşen yöntemlere referans verebilir.
  • Çoklu adresleme (Multicast): Delegatlar aynı anda birden fazla yönteme referans verebilir. Bir delegat çağrıldığında, ona bağlı tüm yöntemler eklenme sırasına göre çağrılır.

Tanımlama ve kullanım örneği:

// Delegat tanımlaması
public delegate int MyDelegate(int x, int y);

// Delegat imzasına uygun yöntem
public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}

// Delegat kullanımı
public class Program
{
    public static void Main(string[] args)
    {
        Calculator calc = new Calculator();

        // Delegat örneği oluşturma ve Add metoduna bağlama
        MyDelegate del = new MyDelegate(calc.Add);

        // Delegat aracılığıyla yöntemi çağırma
        int result = del(5, 3);
        System.Console.WriteLine(result); // Çıktı: 8
    }
}

.NET Framework 3.5 ve LINQ ile birlikte, yerleşik jenerik delegatlar yaygın hale gelmiştir:

  • Action<T1, ..., Tn>: Değer döndürmeyen (void) delegat. 0 ile 16 arasında farklı türlerde parametre alabilir.
  • Func<T1, ..., Tn, TResult>: TResult türünde değer döndüren delegat. 0 ile 16 arasında farklı türlerde parametre alabilir.
  • Predicate<T>: T türünde bir parametre alan ve boolean değer döndüren delegat. Koşul kontrolü için kullanılır.

Yerleşik delegatların karşılaştırmalı tablosu:

Delegat Dönüş değeri Parametreler Kullanım örneği
Action void 0..16 parametre Değeri olmayan işlem gerçekleştirme
Func<TResult> TResult 0 parametre + TResult dönüş değeri Giriş olmadan hesaplama
Func<T, TResult> TResult 1 parametre T + TResult dönüş değeri Değeri dönüştürme
Predicate<T> bool 1 parametre T Koşul kontrolü

Delegatlar, olay işleme, asenkron işlemler, LINQ ve geri çağrı (callback) uygulamaları gibi alanlarda yaygın olarak kullanılır.