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:
ActionveFuncdelegeleri, 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}");
}
}