Junior — Middle
Delegat va voqea o'rtasidagi farqni qanday ajratish mumkin va ularning asosiy farqlari nima?
sobes.tech AI
AIdan javob
C# tilida delegat ma'lum bir imzoga ega metodga havolani ifodalaydigan turdir. Delegatlar metodlarni bilvosita chaqirishga imkon beradi, ularni parametr sifatida o'tkazish yoki keyinchalik chaqirish uchun saqlash mumkin.
Voqea - bu delegatlarga asoslangan mexanizm bo'lib, u obuna bo'lganlarga harakat yoki holat o'zgarishini bildirish uchun ishlatiladi. Voqea delegatni inkapsulyatsiya qiladi va unga kirishni cheklaydi: obunachilar faqat handlerlarni qo'shish yoki olib tashlashlari mumkin, lekin voqeani to'g'ridan-to'g'ri chaqolmaydi.
Asosiy farqlar:
- Delegat tur, voqea esa delegatni ishlatadigan sinf a'zosi.
- Delegat to'g'ridan-to'g'ri chaqirilishi mumkin, voqea esa (voqeani chaqirish faqat uning e'lon qilingan sinf ichida mumkin).
- Voqea inkapsulyatsiya va xavfsizlikni ta'minlaydi, tashqaridan tasodifiy handler chaqiruvlarini oldini oladi.
Misol:
public delegate void Notify(string message); // delegat
public class Process
{
public event Notify ProcessCompleted; // voqea
public void Start()
{
// ... jarayonni boshlash
OnProcessCompleted("Jarayon yakunlandi");
}
protected virtual void OnProcessCompleted(string msg)
{
ProcessCompleted?.Invoke(msg); // voqeani chaqirish
}
}
// Foydalanish:
var process = new Process();
process.ProcessCompleted += msg => Console.WriteLine(msg); // obuna bo'lish
process.Start();