Junior
C# dilində delegatlar nədir və onlar nə üçün istifadə olunur?
sobes.tech Süni İntellekt
AI-dan cavab
C# dilində delegatlar metodlara tipə təhlükəsiz göstəricilərdir. Onlar metodları kapsülləyir, onları parametr kimi keçirməyə və ya dəyişən tipi kimi istifadə etməyə imkan verir.
Onlar aşağıdakı məqsədlər üçün istifadə olunur:
- ** müşahidəçi (Observer) nümunəsinin həyata keçirilməsi:** C#-də hadisələr delegatlara əsaslanır. İstifadəçi delegatı çağırmaqla abunəçilərə bildiriş verir.
- Geri çağırışlar (Callbacks): Bir metodu daha sonra çağıracaq funksiyaya arqument kimi keçirmək.
- Ümumi proqramlaşdırma:
ActionvəFuncdelegatları müxtəlif imzalarla işləyən ümumi metodlar yaratmağa imkan verir. - Paralel və asinxron proqramlaşdırma: Digər axınlarda və ya asinxron şəkildə icra olunan metodlar tez-tez delegatlar vasitəsilə ötürülür.
- LİNQ: LINQ operatorları aktiv şəkildə delegatlardan istifadə edir, filtrasiya, çevirmə və s. üçün şərtləri müəyyən etmək.
Delegatın elan və istifadəsinə nümunə:
// void imzalı və bir int tipli arqumentlə delegatın elan olunması
public delegate void MyDelegate(int x);
public class MyClass
{
public void PrintNumber(int num)
{
Console.WriteLine($"Rəqəm: {num}");
}
public static void Main(string[] args)
{
// PrintNumber metoduna işarə edən delegat nümunəsi yaradın
MyDelegate del = new MyDelegate(new MyClass().PrintNumber);
// Delegat vasitəsilə metodu çağırın
del(10);
}
}
Action ilə nümunə (qaytarmayan void metodlar üçün):
using System;
public class OtherClass
{
public void ExecuteAction(Action action)
{
action(); // Keçirilmiş delegatı icra edir
}
public static void Main(string[] args)
{
Action myAction = () => Console.WriteLine("Salam Action-dan!");
new OtherClass().ExecuteAction(myAction);
}
}
Func ilə nümunə (qaytarmalı metodlar üçün):
using System;
public class ThirdClass
{
public int Calculate(Func<int, int, int> operation, int a, int b)
{
return operation(a, b); // Keçirilmiş əməliyyatı icra et və nəticəni qaytar
}
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 nəticəsi: {result}");
}
}