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();