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