Junior
C# da voqealar nima?
sobes.tech AI
AIdan javob
C# da voqealar Observer Pattern asosida qurilgan mexanizmdir va ob'ekt (nashr qiluvchi) muayyan harakat yoki holat o'zgarishini boshqa ob'ektlarga (obuna bo'luvchilarga) xabar berishga imkon beradi.
Asosiy komponentlar:
- Nashr qiluvchi (Publisher): Voqeani e'lon qiladigan sinf.
- Voqea (Event):
eventkalit so'zi yordamida e'lon qilingan voqea. Bu handlerlar foydalanadigan metodning imzosini belgilaydi. - Delegat (Delegate): Voqeaga yozilish mumkin bo'lgan metodlarning imzosini belgilovchi tur. Ko'pincha
EventHandleryokiEventHandler<TEventArgs>oldindan belgilangan delegat ishlatiladi. - Obuna bo'luvchi (Subscriber): Nashr qiluvchining voqeasiga yoziladigan va voqea yuzaga kelganda chaqiriladigan metod (voqea handler) ta'minlaydigan sinf yoki ob'ekt.
- Voqea handler (Event Handler): Voqeaga yozilgan metod, voqea delegatining imzosiga mos keladi.
Misol uchun e'lon qilish va foydalanish:
// Oldindan belgilangan EventHandler ishlatilmayotgan bo'lsa delegatni e'lon qilish
public delegate void MyEventHandler(object sender, EventArgs e);
// Nashr qiluvchi sinf
public class Publisher
{
// Delegat yordamida voqeani e'lon qilish
public event MyEventHandler MyEvent;
public void DoSomething()
{
// Voqeani chaqirish (agar obuna bo'luvchilar bo'lsa)
OnMyEvent(EventArgs.Empty);
}
// Voqeani chaqirish uchun metod (nulldan himoyalangan)
protected virtual void OnMyEvent(EventArgs e)
{
MyEvent?.Invoke(this, e);
}
}
// Obuna bo'luvchi sinf
public class Subscriber
{
public void Subscribe(Publisher publisher)
{
// Voqeaga yozilish
publisher.MyEvent += HandleMyEvent;
}
public void Unsubscribe(Publisher publisher)
{
// Voqeadan yozilishni bekor qilish
publisher.MyEvent -= HandleMyEvent;
}
// Voqea handler
private void HandleMyEvent(object sender, EventArgs e)
{
Console.WriteLine("Voqea yuz berdi!");
}
}
// Foydalanish misoli
public class Program
{
public static void Main(string[] args)
{
Publisher pub = new Publisher();
Subscriber sub = new Subscriber();
sub.Subscribe(pub); // Yozilish
pub.DoSomething(); // Voqeani chaqirish
sub.Unsubscribe(pub); // Yozilishni bekor qilish (ixtiyoriy)
}
}
Voqealar ob'ektlar o'rtasida bo'sh bog'lanishni (loose coupling) ta'minlaydi, ular bir-birining implementatsiyasini bilmasdan o'zaro ta'sir qilishlariga imkon beradi.