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