Sobes.tech
Junior — Middle

Ինչպե՞ս տարբերել դելեգատին իրադարձությունից և ինչ են նրանց հիմնական տարբերությունները։

sobes.tech AI

Պատասխան AI-ից

C#-ում դելեգատ-ը այն տիպն է, որը ներկայացնում է հղում որոշակի սինտաքսով մեթոդին: Դելեգատները թույլ են տալիս անուղղակիորեն կանչել մեթոդներ, փոխանցելով դրանք որպես պարամետրեր կամ պահելով հետագա կանչի համար:

Եվենթ-ը դելեգատների վրա հիմնված մեխանիզմ է, որը օգտագործվում է գրանցվածներին տեղեկացնելու համար գործողության կամ վիճակի փոփոխության մասին: Եվենթը թաքննում է դելեգատը և սահմանափակում է նրա հասանելիությունը՝ գրանցվածները կարող են միայն ավելացնել կամ հեռացնել մշակողներին, բայց չեն կարող անմիջապես կանչել այն:

Հիմնական տարբերությունները՝

  • Դելեգատը տիպ է, իսկ եվենթը՝ դասի անդամ, որը օգտագործում է դելեգատ:
  • Դելեգատը կարող է անմիջապես կանչվել, եվենթը՝ ոչ (եվենթը կարելի է կանչել միայն այն դասի ներսում, որտեղ այն հայտարարվել է):
  • Եվենթը ապահովում է թաքնվածություն և անվտանգություն՝ կանխելով արտաքին կողմից պատահական կանչերը:

Օրինակ՝

public delegate void Notify(string message); // դելեգատ

public class Process
{
    public event Notify ProcessCompleted; // եվենթ

    public void Start()
    {
        // ... գործընթացի իրականացման
        OnProcessCompleted("Գործընթացը ավարտվեց");
    }

    protected virtual void OnProcessCompleted(string msg)
    {
        ProcessCompleted?.Invoke(msg); // եվենթը կանչելը
    }
}

// Օգտագործում՝
var process = new Process();
process.ProcessCompleted += msg => Console.WriteLine(msg); // գրանցում
process.Start();