Junior
C# da delegat nima?
sobes.tech AI
AIdan javob
Delegat — bu delegate kalit soʻz yordamida eʼlon qilingan havola turidir. U belgilangan imzoga (qaytish turi va parametrlar turlari) ega metodni inkapsulyatsiya qiladi. Aslida, delegat — bu metodga xavfsiz ko‘rsatkich.
Delegatlarning asosiy xususiyatlari:
- Metodlarni inkapsulyatsiya qilish: Delegat u qaratgan metod haqida maʼlumot saqlaydi.
- Turlar xavfsizligi: Delegat faqat imzosi to‘g‘ri keladigan metodlarga murojaat qilishi mumkin.
- Multicast: Delegatlar bir vaqtning o‘zida bir nechta metodga murojaat qilishi mumkin. Delegat chaqirilganda, unga bog‘langan barcha metodlar ularning qo‘shilgan tartibida chaqiriladi.
Eʼlon qilish va foydalanish misoli:
// Delegat eʼlon qilish
public delegate int MyDelegate(int x, int y);
// Delegat imzosiga mos metod
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}
// Delegatni ishlatish
public class Program
{
public static void Main(string[] args)
{
Calculator calc = new Calculator();
// Delegat nusxasini yaratish va Add metodiga bog‘lash
MyDelegate del = new MyDelegate(calc.Add);
// Delegat yordamida metodni chaqirish
int result = del(5, 3);
System.Console.WriteLine(result); // Chiqish: 8
}
}
.NET Framework 3.5 va LINQ bilan birga, ichki umumiy delegatlar keng tarqaldi:
Action<T1, ..., Tn>: Qaytarmaydigan delegat (void). 0 dan 16 gacha turli turlardagi parametrlarni qabul qilishi mumkin.Func<T1, ..., Tn, TResult>:TResultturidagi qiymatni qaytaradigan delegat. 0 dan 16 gacha turli turlardagi parametrlarni qabul qilishi mumkin.Predicate<T>:Tturidagi parametrni qabul qiladigan va boolean qiymat qaytaradigan delegat. Shartlarni tekshirish uchun ishlatiladi.
Ichki delegatlarning taqqoslash jadvali:
| Delegat | Qaytish qiymati | Parametrlar | Foydalanish misoli |
|---|---|---|---|
Action |
void |
0..16 parametrlar | Qaytarmaydigan amalni bajarish |
Func<TResult> |
TResult |
0 parametr + TResult qiymat qaytarish |
Kiritmasiz hisoblash |
Func<T, TResult> |
TResult |
1 parametr T + TResult qiymat qaytarish |
Qiymatni o‘zgartirish |
Predicate<T> |
bool |
1 parametr T |
Shartni tekshirish |
Delegatlar keng qo‘llaniladi voqealarni boshqarish, asinxron operatsiyalar, LINQ va callbacklarni amalga oshirishda.