Junior
რა არის დელეგატი C#-ში?
sobes.tech AI
პასუხი AI-სგან
Делегат — бу шилтемелүү тип, ал delegate ачкыч сөзү аркылуу жарыяланат. Ал белгилүү бир сигнатурасы бар ыкманы инкапсуляциялайт (кайтаруучу түрү жана параметрлердин түрлөрү). Негизинен, делегат — бул ыкмага типтик коопсуз көрсөткүч.
Делегаттын негизги өзгөчөлүктөрү:
- Ыкмалардын инкапсуляциясы: Делегат ал кайсы ыкмага шилтеме кылганын сактайт.
- Типтик коопсуздук: Делегат гана ошол ыкмаларга шилтеме кыла алат, алардын сигнатурасы делегаттын сигнатурасына так ылайыктуу.
- Мултикаст: Делегаттар бир нече ыкмага бирдей шилтеме кыла алат. Делегат чакырылганда, ага байланышкан бардык ыкмалар алардын кошулуу тартибинде чакырылат.
Декларация жана колдонуу мисалы:
// Делегатты жарыялоо
public delegate int MyDelegate(int x, int y);
// Сигнатурага ылайыктуу ыкма
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}
// Делегатты колдонуу
public class Program
{
public static void Main(string[] args)
{
Calculator calc = new Calculator();
// Делегаттын экземплярин түзүү жана Add ыкмасына байланыштыруу
MyDelegate del = new MyDelegate(calc.Add);
// Делегат аркылуу ыкманы чакыруу
int result = del(5, 3);
System.Console.WriteLine(result); // Чыгуу: 8
}
}
.NET Framework 3.5 жана LINQ пайда болгондон кийин, кеңири жайылган встроенный гениралык делегаттар:
Action<T1, ..., Tn>: кайтаруучу мааниси жок делегат (void). 0дан 16га чейин ар кандай типтеги параметрлерди кабыл алат.Func<T1, ..., Tn, TResult>:TResultтипинде маанини кайтарган делегат. 0дан 16га чейин ар кандай типтеги параметрлерди кабыл алат.Predicate<T>: бир параметрTтипинде жана бул булев маанини кайтарат. Шартты текшерүү үчүн колдонулат.
Встроенный делегаттарды салыштыруу таблицасы:
| Делегат | Кайтаруучу мааниси | Параметрлер | Колдонуу мисалы |
|---|---|---|---|
Action |
void |
0..16 параметрлер | Эч кандай кайтаруу мааниси менен иштетүү |
Func<TResult> |
TResult |
0 параметр + TResult кайтаруу |
Кирүү маалыматтарысыз эсептөө |
Func<T, TResult> |
TResult |
1 параметр T + TResult кайтаруу |
Түшүнүү мааниси |
Predicate<T> |
bool |
1 параметр T |
Шартты текшерүү |
Делегаттар кеңири колдонулат окуяларды иштетүүдө, асинхрондуу операцияларда, LINQ жана колбэктерди ишке ашырууда.