Supponiamo che io sono un metodo che modifica lo stato di un oggetto, e genera un evento per notificare gli ascoltatori di questo cambiamento di stato:Posso avere una forte eccezione di sicurezza ed eventi?
public class Example
{
public int Counter { get; private set; }
public void IncreaseCounter()
{
this.Counter = this.Counter + 1;
OnCounterChanged(EventArgs.Empty);
}
protected virtual void OnCounterChanged(EventArgs args)
{
if (CounterChanged != null)
CounterChanged(this,args);
}
public event EventHandler CounterChanged;
}
I gestori di eventi possono generare un'eccezione anche se IncreaseCounter
completato con successo il cambiamento di stato. Quindi non abbiamo forte exception safety qui:
Il forte garanzia: che l'operazione ha sia completata con successo o generato un'eccezione, lasciando lo Stato programma esattamente come era prima l'operazione iniziata.
È possibile avere una forte protezione dalle eccezioni quando è necessario generare eventi?
In altre parole, ottenere una forte sicurezza delle eccezioni nei metodi che generano eventi ha il costo di dover inghiottire/registrare eccezioni. Questa è quasi sempre una brutta cosa, quindi ho concluso che il raggiungimento di una forte sicurezza delle eccezioni probabilmente non ne vale la pena. –