Sobes.tech
Junior

Ce este un delegat în C#?

sobes.tech AI

Răspuns de la AI

Un delegat este un tip de referință declarat cu cuvântul cheie delegate. Encapsulează o metodă cu o semnătură specifică (tipul de returnare și tipurile de parametri). În esență, un delegat este un pointer sigur la metodă.

Proprietățile principale ale delegaților:

  • Încapsularea metodelor: Delegatul stochează informații despre metoda la care face referire.
  • Siguranța tipurilor: Delegatul poate face referire doar la metode a căror semnătură corespunde exact cu semnătura delegatului.
  • Multicast: Delegatii pot face referire la mai multe metode simultan. La apelarea unui delegat, toate metodele asociate sunt apelate în ordinea în care au fost adăugate.

Exemplu de declarație și utilizare:

// Declararea delegatului
public delegate int MyDelegate(int x, int y);

// Metodă care corespunde semnăturii delegatului
public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}

// Utilizarea delegatului
public class Program
{
    public static void Main(string[] args)
    {
        Calculator calc = new Calculator();

        // Crearea unei instanțe de delegat și legarea la metoda Add
        MyDelegate del = new MyDelegate(calc.Add);

        // Apelarea metodei prin delegat
        int result = del(5, 3);
        System.Console.WriteLine(result); // Afișează: 8
    }
}

Odată cu apariția .NET Framework 3.5 și LINQ, delegații generici încorporati au devenit larg utilizati:

  • Action<T1, ..., Tn>: Delegat care nu returnează valoare (void). Poate accepta între 0 și 16 parametri de tipuri diferite.
  • Func<T1, ..., Tn, TResult>: Delegat care returnează o valoare de tip TResult. Poate accepta între 0 și 16 parametri de tipuri diferite.
  • Predicate<T>: Delegat care acceptă un parametru de tip T și returnează o valoare booleană. Este utilizat pentru verificarea condițiilor.

Tabel comparativ al delegaților încorporați:

Delegat Valoare de returnare Parametri Exemplu de utilizare
Action void 0..16 parametri Executarea unei acțiuni fără valoare de returnare
Func<TResult> TResult 0 parametri + valoare de returnare TResult Calcul fără date de intrare
Func<T, TResult> TResult 1 parametru de tip T + valoare de returnare TResult Transformarea valorii
Predicate<T> bool 1 parametru de tip T Verificarea condiției

Delegatii sunt utilizati pe scară largă în gestionarea evenimentelor, operațiuni asincrone, LINQ și pentru implementarea callback-urilor.