Sobes.tech
Junior

C# dilinde delegeler nedir ve ne amaçla kullanılırlar?

sobes.tech yapay zeka

AI'dan gelen yanıt

C# dilinde delegeler, tür güvenli yöntem göstergeleridir. Bir yöntemi kapsüller, onu parametre olarak geçirmeye veya değişken tipi olarak kullanmaya olanak tanır.

Kullanım alanları:

  • Gözlemci (Observer) tasarım deseninin uygulanması: C#'daki olaylar delegelere dayanır. Yayıncı, abone olanlara delegayı çağırarak bildirimde bulunur.
  • Geri çağrılar (Callbacks): Bir yöntemi, daha sonra çağrılacak bir fonksiyonun argümanı olarak geçmek.
  • Genel programlama: Action ve Func delegeleri, farklı imza türleriyle çalışan genel yöntemler oluşturmayı sağlar.
  • Paralel ve asenkron programlama: Diğer akışlarda veya asenkron olarak çalıştırılacak yöntemler genellikle delegeler aracılığıyla geçirilir.
  • LİNQ: LINQ operatörleri, filtreleme, dönüşüm gibi işlemleri tanımlamak için aktif olarak delegeleri kullanır.

Bir delege bildirimi ve kullanımı örneği:

// void imzalı ve bir int argüman alan delege bildirimi
public delegate void MyDelegate(int x);

public class MyClass
{
    public void PrintNumber(int num)
    {
        Console.WriteLine($"Sayı: {num}");
    }

    public static void Main(string[] args)
    {
        // PrintNumber metoduna işaret eden delege örneği oluşturma
        MyDelegate del = new MyDelegate(new MyClass().PrintNumber);

        // Delegayı kullanarak metodu çağırma
        del(10);
    }
}

Action ile örnek (dönüş değeri olmayan void metodlar için):

using System;

public class OtherClass
{
    public void ExecuteAction(Action action)
    {
        action(); // Geçilen delegayı çalıştır
    }

    public static void Main(string[] args)
    {
        Action myAction = () => Console.WriteLine("Action'dan Merhaba!");
        new OtherClass().ExecuteAction(myAction);
    }
}

Func ile örnek (dönüş değeri olan metodlar için):

using System;

public class ThirdClass
{
    public int Calculate(Func<int, int, int> operation, int a, int b)
    {
        return operation(a, b); // Geçilen işlemi gerçekleştir ve sonucu döndür
    }

    public static void Main(string[] args)
    {
        Func<int, int, int> add = (x, y) => x + y;
        int result = new ThirdClass().Calculate(add, 5, 3);
        Console.WriteLine($"Toplama sonucu: {result}");
    }
}