Junior
Šta su događaji u C#?
sobes.tech АИ
Одговор од АИ
Догађаји у C# су механизам заснован на шаблону "набљедник" (Observer Pattern), који омогућава објекту (издавачу) да обавештава друге објекте (подписнике) о наступању одређене акције или промене стања.
Основне компоненте:
- Издавач (Publisher): Клас који проглашава догађај.
- Догађај (Event): Објављивање догађаја коришћењем кључне речи
event. Одређује сигнатуру метода који ће користити обработници. - Делегат (Delegate): Тип који одређује сигнатуру метода који могу бити потписани на догађај. Често се користи претходно дефинисани делегат
EventHandlerилиEventHandler<TEventArgs>. - Потписник (Subscriber): Клас или објекат који се претплаћује на догађај издавача и пружа метод (обрађивач догађаја) који се позива при наступању догађаја.
- Обрађивач догађаја (Event Handler): Метод потписника који одговара сигнатури делегата догађаја.
Пример објаве и коришћења:
// Објављивање делегата, ако се не користи претходно дефинисани EventHandler
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) између објеката, омогућавајући им да сарађују без директног знања о реализацији једни другог.