Ko'p hollarda maxsus delegatlarni qo'lda belgilashga hojat qolmasligi uchun C# tarkibiga umumiy delegat turlari Func va Action kiritilgan.
Func bu - System nomlar fazosiga kiritilgan umumiy delegatdir va u parametrlari bo'lmagan metodni kapsulaga soladi va parametr bilan ko'rsatilgan turdagi qiymatni qaytaradi. Bunda nol yoki undan ortiq kirish parametrlari va bitta chiqish parametri mavjud hisoblanib, oxirgi parametr har doim chiqish parametri sifatida bo'ladi. Func delegati parametrlari <> (burchakli qavs)lar ichida ko'rsatiladi.
Bitta kirish va chiqish parametriga ega Func delegatining umumiy ko'rinishi:
Misol:
usingSystem;namespaceDelegates{classProgram {staticvoidMain(string[] args) { //delegatga metod tayinlashFunc<int,bool> add = IsOdd; //son kiritishint number =int.Parse(Console.ReadLine()); //delegatni ishlatish va natijani o'zlashtirishbool result =add(number); //natijani ekranga chiqarishConsole.WriteLine($"{number} soni toqligi: {result}");Console.ReadKey(); } //sonni toqlikka tekshiruvchi metodstaticboolIsOdd(int a) {return a %2==1; } }}
Natija:
Ikkita kirish va chiqish parametriga ega Func delegatining umumiy ko'rinishi:
Misol:
usingSystem;namespaceDelegates{classProgram {staticvoidMain(string[] args) { //delegatga metod tayinlashFunc<int,int,int> add = Summ; //sonlarni kiritishint number1 =int.Parse(Console.ReadLine());int number2 =int.Parse(Console.ReadLine()); //delegatni ishlatish va natijani o'zlashtirishint result =add(number1, number2); //natijani ekranga chiqarishConsole.WriteLine($"{number1} + {number2} = {result}");Console.ReadLine(); } //Ikkita sonni yig'indisini qaytaruvchi metodstaticintSumm(int a,int b) {return a + b; } }}
Natija:
Yuqoridagi misollardan tashqari Func delegati maksimal 16 tagacha kirish parametrlarini qabul qilishi mumkin: