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