Junior
Ҳодисаҳо дар C# чӣ гунаанд?
sobes.tech AI
Ҷавоб аз AI
Воқеиятҳо дар C# механизмест, ки асос ёфтааст ба намунаи "наблюдатель" (Observer Pattern), ки имкон медиҳад объект (паблишер) дигар объектҳо (подписчикон) огоҳ кунанд дар бораи рӯй додани амал ё тағйироти ҳолат.
Компонентҳои асосӣ:
- Паблишер (Publisher): Класс, ки рӯйдодро эълон мекунад.
- Воқеият (Event): Эълон кардани рӯйдод бо истифода аз калимаи калидии
event. Сигнатураи усулро муайян мекунад, ки онро коркардкунандагон истифода мебаранд. - Делегат (Delegate): Намуд, ки сигнатураи усулҳоро муайян мекунад, ки метавонанд ба рӯйдод обуна шаванд. Одатан, делегати пешфарз
EventHandlerёEventHandler<TEventArgs>истифода мешавад. - Подписчик (Subscriber): Класс ё объект, ки ба рӯйдоди паблишер обуна мешавад ва усул (коркардкунандаи рӯйдод) медиҳад, ки дар вақти рӯй додан даъват мешавад.
- Коркардкунандаи рӯйдод (Event Handler): Усули подписчик, ки мувофиқи сигнатураи делегати рӯйдод аст.
Масалан барои эълон ва истифода:
// Эълон кардани делегат, агар делегати пешфарз истифода нашуда бошад
public delegate void MyEventHandler(object sender, EventArgs e);
// Класс паблишер
public class Publisher
{
// Эълон кардани рӯйдод бо истифодаи делегат
public event MyEventHandler MyEvent;
public void DoSomething()
{
// Даъвати рӯйдод (агар подписчикон бошанд)
OnMyEvent(EventArgs.Empty);
}
// Усули барои даъвати рӯйдод (муфид аз null)
protected virtual void OnMyEvent(EventArgs e)
{
MyEvent?.Invoke(this, e);
}
}
// Класс подписчик
public class Subscriber
{
public void Subscribe(Publisher publisher)
{
// Обуна шудан ба рӯйдод
publisher.MyEvent += HandleMyEvent;
}
public void Unsubscribe(Publisher publisher)
{
// Азобуна шудан аз рӯйдод
publisher.MyEvent -= HandleMyEvent;
}
// Усули коркардкунандаи рӯйдод
private void HandleMyEvent(object sender, EventArgs e)
{
Console.WriteLine("Рӯйдод фаъол шуд!");
}
}
// Масалан барои истифода
public class Program
{
public static void Main(string[] args)
{
Publisher pub = new Publisher();
Subscriber sub = new Subscriber();
sub.Subscribe(pub); // Обуна шудан
pub.DoSomething(); // Даъвати рӯйдод
sub.Unsubscribe(pub); // Азобуна шудан (ихтиёрӣ)
}
}
Рӯйдодҳо таъмин мекунанд боэътимодии суст (loose coupling) байни объектҳо, ки имкон медиҳад онҳо ҳамкорӣ кунанд бе донистани мустақим дар бораи иҷрои якдигар.