Junior
C# да делегаттар эмне жана алар эмне үчүн колдонулат?
sobes.tech AI
AIден жооп
C# тилиндеги делегаттар — бул ыкмаларды типтик коопсуз көрсөткүчтөр. Алар ыкманы капсуладайт жана аны параметр катары өткөрүүгө же өзгөрмө тиби катары колдонууга мүмкүндүк берет.
Кулланылат:
- Көзөмөлдөө үлгүсүн ишке ашыруу (Observer): C#теги окуялар делегаттарга негизделген. Жазуучу жазылуучуларга делегатты чакырып билдирет.
- Обратный чакыруулар (Callbacks): Ыкманы функциянын аргументы катары өткөрүү, ал кийинчерээк чакырылат.
- Жалпы программалоо:
ActionжанаFuncделегаттары ар кандай сигнатуралар менен иштей турган жалпы ыкмаларды түзүүгө мүмкүндүк берет. - Параллел жана асинхрон программалоо: Башка агымдарда же асинхрон түрдө ишке ашырылуучу ыкмалар көбүнчө делегаттар аркылуу өткөрүлөт.
- LİNQ: LINQ операторлору шарттарды аныктоо, түрлендирүү жана башка иштер үчүн делегаттарды активдүү колдонушат.
Делегаттын декларациясы жана колдонулушунун мисалы:
// void сигнатурасы жана бир аргументти (int) камтыган делегатты декларациялоо
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}");
}
}