Junior
რა არის მოვლენები C#-ში?
sobes.tech AI
პასუხი AI-სგან
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) тәэмин итә, бу аларга бер-берсе белән турыдан-туры белешмәгә мохтаҗ булмыйча хезмәттәшлек итәргә мөмкинлек бирә.