Eventi: pubblicazione/sottoscrizione, parola chiave event
Imparate il modello pubblicazione/sottoscrizione con gli eventi: dichiarate un event, aggiungete e rimuovete gestori, passate dati tramite EventArgs e sollevate l’evento secondo il pattern OnX.
Eventi: pubblicazione/sottoscrizione, parola chiave event è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 2 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 3 lezioni in totale.
Panoramica sugli eventi
Obiettivo: implementare il modello pubblicazione/sottoscrizione con gli eventi.
- Dichiari un event nel produttore
- Effettui la sottoscrizione con += e la annulli con -=
- Generi l'evento in modo sicuro nel produttore
- Passi i dati utilizzando EventArgs
Utilizzo di base degli eventi
Esponga un event e consenta agli ascoltatori di collegarsi e scollegarsi. Solo il produttore può invocarlo.
using System;
public class Button
{
public event EventHandler Click;
public void SimulateClick()
{
// Safe raise: copy then invoke if not null (C# 6-safe)
EventHandler h = Click;
if (h != null) h(this, EventArgs.Empty);
}
}
public class Program
{
static void OnClick(object sender, EventArgs e)
{
Console.WriteLine("Clicked!");
}
public static void Main(string[] args)
{
Button b = new Button();
b.Click += OnClick; // subscribe
b.SimulateClick(); // prints "Clicked!"
b.Click -= OnClick; // unsubscribe
b.SimulateClick(); // no output
}
}
Evento con dati
Utilizzi EventArgs (o EventHandler<TEventArgs>) per passare dati utili ai sottoscrittori.
using System;
// Data for the event
public sealed class PriceChangedEventArgs : EventArgs
{
public decimal OldPrice { get; private set; }
public decimal NewPrice { get; private set; }
public PriceChangedEventArgs(decimal oldP, decimal newP)
{
OldPrice = oldP; NewPrice = newP;
}
}
public sealed class Product
{
private decimal _price;
public event EventHandler<PriceChangedEventArgs> PriceChanged;
public decimal Price
{
get { return _price; }
set
{
if (value != _price)
{
decimal old = _price;
_price = value;
EventHandler<PriceChangedEventArgs> h = PriceChanged;
if (h != null) h(this, new PriceChangedEventArgs(old, _price));
}
}
}
}
public class Program
{
public static void Main(string[] args)
{
Product p = new Product();
p.PriceChanged += delegate(object s, PriceChangedEventArgs e)
{
Console.WriteLine("Price: " + e.OldPrice + " -> " + e.NewPrice);
};
p.Price = 10m;
p.Price = 12m;
}
}
Multicast e lambda
Gli eventi sono multicast: più gestori vengono eseguiti nell'ordine di sottoscrizione. Utilizzi gestori denominati o anonimi.
using System;
public class Alarm
{
public event EventHandler Ring;
public void Trigger()
{
EventHandler h = Ring;
if (h != null) h(this, EventArgs.Empty);
}
}
public class Program
{
static void HandlerA(object s, EventArgs e) { Console.WriteLine("A"); }
static void HandlerB(object s, EventArgs e) { Console.WriteLine("B"); }
public static void Main(string[] args)
{
Alarm a = new Alarm();
a.Ring += HandlerA; // named
a.Ring += delegate(object s, EventArgs e) { Console.WriteLine("lambda"); }; // anon
a.Ring += HandlerB;
a.Trigger(); // prints A, lambda, B (multicast order)
}
}
Pattern OnX per generare eventi
Utilizzi un metodo OnX protetto per generare gli eventi. Copi il delegato in una variabile locale e verifichi che non sia null prima di invocarlo.
using System;
public class Ticker
{
public event EventHandler Tick;
protected virtual void OnTick()
{
EventHandler h = Tick; // copy to local
if (h != null) h(this, EventArgs.Empty);
}
public void RunOnce()
{
// do work...
OnTick(); // raise via protected method
}
}
public class Program
{
static void Show(object s, EventArgs e) { Console.WriteLine("Tick!"); }
public static void Main(string[] args)
{
Ticker t = new Ticker();
t.Tick += Show;
t.RunOnce();
}
}
Suggerimenti e insidie degli eventi
Suggerimenti:
- Annulli sempre la sottoscrizione ( -= ) quando un sottoscrittore non è più necessario.
- Mantenga i gestori brevi; le operazioni lunghe devono essere accodate.
- Utilizzi EventArgs (o una sottoclasse) per passare i dati.
- Solo il produttore dovrebbe generare l'evento.
Ruolo della parola chiave event
Riepilogo
Riepilogo: dichiari un event, consenta agli ascoltatori di collegarsi e scollegarsi, passi i dati con EventArgs e generi l'evento tramite un metodo OnX protetto.
Impara C# con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 93
- Lezioni
- 346
Domande Frequenti
La lezione «Eventi: pubblicazione/sottoscrizione, parola chiave event» è gratuita?
Sì — il testo completo di «Eventi: pubblicazione/sottoscrizione, parola chiave event» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 3 lezioni in totale.
Cosa imparerò in «Eventi: pubblicazione/sottoscrizione, parola chiave event»?
Imparate il modello pubblicazione/sottoscrizione con gli eventi: dichiarate un event, aggiungete e rimuovete gestori, passate dati tramite EventArgs e sollevate l’evento secondo il pattern OnX. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C# Academy?
Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 3.
Quanto tempo richiede la lezione «Eventi: pubblicazione/sottoscrizione, parola chiave event»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C# Academy?
Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- delegate, Action/Func, closure
- Eventi: pubblicazione/sottoscrizione, parola chiave event
- Pattern degli eventi, problemi comuni (memory leak)