Жалпыланған делегаттар Делегаттар, басқа типтер сияқты, жалпылануы мүмкін, мысалы:
1
2
3
4
5
6
7
8
9
10
11
12
Operation squareOperation = Square;
decimal result1 = squareOperation(5);
Console.WriteLine(result1); // 25
Operation doubleOperation = Double;
int result2 = doubleOperation(5);
Console.WriteLine(result2); // 10
decimal Square(int n) => n * n;
int Double(int n) => n + n;
delegate T Operation(K val);
Мұнда Operation делегаты екі тип параметрімен теріледі. T параметрі қайтарылатын мән типін білдіреді. Ал K параметрі делегатқа берілетін параметр типін білдіреді. Осылайша, бұл делегат кез-келген типтегі параметрді қабылдайтын және кез-келген типтегі мәнді қайтаратын әдіске сәйкес келеді.
Бағдарламада біз белгілі бір әдіс бойынша делегаттың айнымалыларын анықтай аламыз. Мысалы, Operation делегаты int санын қабылдайтын және decimal типінің санын қайтаратын әдіске сәйкес келеді. Ал Operation делегаты int типті санды қабылдайтын және қайтаратын әдіске сәйкес келеді.
Делегаттар әдіс параметрлері ретінде Сондай-ақ, делегаттар әдістердің параметрлері бола алады. Осының арқасында параметрлер ретінде бір әдіс әрекеттерді - басқа әдістерді қабылдай алады. Мысалы:
1
2
3
4
5
6
7
8
9
10
11
12
13
DoOperation(5, 4, Add); // 9
DoOperation(5, 4, Subtract); // 1
DoOperation(5, 4, Multiply); // 20
void DoOperation(int a, int b, Operation op)
{
Console.WriteLine(op(a,b));
}
int Add(int x, int y) => x + y;
int Subtract(int x, int y) => x - y;
int Multiply(int x, int y) => x * y;
delegate int Operation(int x, int y);
Мұнда DoOperation әдісі параметр ретінде екі санды және Operation делегаты ретінде кейбір әрекеттерді қабылдайды. Әдіс ішінде біз операция делегатын шақырамыз, оған алғашқы екі параметрден сандарды береміз.
DoOperation әдісін шақырған кезде, біз оған операция делегатына сәйкес келетін әдісті үшінші параметр ретінде бере аламыз.