Junior
Cosa sono gli eventi in C#?
sobes.tech AI
Risposta dell'AI
Gli eventi in C# sono un meccanismo basato sul modello "osservatore" (Observer Pattern), che consente a un oggetto (l'editore) di notificare altri oggetti (gli abbonati) dell'avvenimento di un'azione o di una modifica dello stato.
Componenti principali:
- Editore (Publisher): Classe che dichiara un evento.
- Evento (Event): Dichiarazione di un evento usando la parola chiave
event. Definisce la firma del metodo che gli handler utilizzeranno. - Delegato (Delegate): Tipo che definisce la firma dei metodi che possono iscriversi a un evento. Spesso si utilizza il delegato predefinito
EventHandleroEventHandler<TEventArgs>. - Sottoscrittore (Subscriber): Classe o oggetto che si iscrive a un evento dell'editore e fornisce un metodo (gestore dell'evento) chiamato quando l'evento viene attivato.
- Gestore dell'evento (Event Handler): Metodo del sottoscrittore che corrisponde alla firma del delegato dell'evento.
Esempio di dichiarazione e utilizzo:
// Dichiarazione del delegato, se non si utilizza il predefinito EventHandler
public delegate void MyEventHandler(object sender, EventArgs e);
// Classe editore
public class Publisher
{
// Dichiarazione dell'evento usando il delegato
public event MyEventHandler MyEvent;
public void DoSomething()
{
// Attivare l'evento (se ci sono sottoscrittori)
OnMyEvent(EventArgs.Empty);
}
// Metodo per attivare l'evento (protetto da null)
protected virtual void OnMyEvent(EventArgs e)
{
MyEvent?.Invoke(this, e);
}
}
// Classe sottoscrittore
public class Subscriber
{
public void Subscribe(Publisher publisher)
{
// Iscrizione all'evento
publisher.MyEvent += HandleMyEvent;
}
public void Unsubscribe(Publisher publisher)
{
// Disiscrizione dall'evento
publisher.MyEvent -= HandleMyEvent;
}
// Gestore dell'evento
private void HandleMyEvent(object sender, EventArgs e)
{
Console.WriteLine("L'evento si è verificato!");
}
}
// Esempio di utilizzo
public class Program
{
public static void Main(string[] args)
{
Publisher pub = new Publisher();
Subscriber sub = new Subscriber();
sub.Subscribe(pub); // Iscrizione
pub.DoSomething(); // Attiva l'evento
sub.Unsubscribe(pub); // Disiscrizione (opzionale)
}
}
Gli eventi forniscono un basso accoppiamento (loose coupling) tra oggetti, consentendo loro di interagire senza conoscere direttamente l'implementazione dell'altro.