Sobes.tech
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 жана колбэктерди ишке ашырууда.