Junior
C# ში დელეგატები რა არის და რა მიზნით გამოიყენება?
sobes.tech AI
პასუხი AI-სგან
C#-да делегаттар — бұл әдістерге қауіпсіз көрсеткіштер. Олар әдісті инкапсуляциялайды, оны параметр ретінде беру немесе айнымалының типі ретінде пайдалану мүмкіндігін береді.
Қолданылады:
- Қадағалау үлгісін жүзеге асыру (Observer): C#-дағы оқиғалар делегаттарға негізделген. Жариялаушы жазылушыларды делегатты шақыру арқылы хабарлайды.
- Кері шақырулар (Callbacks): Әдісті функцияның аргументі ретінде беру, ол кейінірек шақырылады.
- Жалпы бағдарламалау:
ActionжәнеFuncделегаттары әртүрлі сигнатуралармен жұмыс істейтін жалпы әдістерді құруға мүмкіндік береді. - Параллель және асинхронды бағдарламалау: Басқа ағындарда немесе асинхронды түрде орындалатын әдістер көбінесе делегаттар арқылы беріледі.
- LİNQ: LINQ операторлары шарттарды анықтау, түрлендіру және т.б. үшін делегаттарды белсенді пайдаланады.
Делегатты жариялау және пайдалану мысалы:
// void сигнатурасы және бір аргументі бар делегатты жариялау
public delegate void MyDelegate(int x);
public class MyClass
{
public void PrintNumber(int num)
{
Console.WriteLine($"Сан: {num}");
}
public static void Main(string[] args)
{
// PrintNumber әдісіне сілтеме бар делегат құру
MyDelegate del = new MyDelegate(new MyClass().PrintNumber);
// Делегат арқылы әдісті шақыру
del(10);
}
}
Action мысалы (void қайтарымсыз әдістер үшін):
using System;
public class OtherClass
{
public void ExecuteAction(Action action)
{
action(); // берілген делегатты орындау
}
public static void Main(string[] args)
{
Action myAction = () => Console.WriteLine("Сәлем Action-дан!");
new OtherClass().ExecuteAction(myAction);
}
}
Func мысалы (қайтарым мәні бар әдістер үшін):
using System;
public class ThirdClass
{
public int Calculate(Func<int, int, int> operation, int a, int b)
{
return operation(a, b); // берілген операцияны орындап, нәтижесін қайтару
}
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($"Қосынды нәтижесі: {result}");
}
}