Supongamos que tengo un método que cambia el estado de un objeto, y dispara un evento para notificar a los oyentes de este cambio de estado:¿Puedo tener una fuerte excepción de seguridad y eventos?
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;
}
Los controladores de eventos pueden lanzar una excepción, incluso si IncreaseCounter
completado con éxito el cambio de estado. Así que no tenemos una fuerte exception safety aquí:
La garantía fuerte: que la operación ha completado con éxito, ya sea o iniciado una excepción, dejando el estado del programa exactamente como imperante antes del inicio de la operación.
¿Es posible tener una fuerte excepción de seguridad cuando necesita eventos?
En otras palabras, lograr una fuerte excepción de seguridad en los métodos que generan eventos tiene el costo de tener que tragar/registrar excepciones. Eso casi siempre es algo malo, así que llegué a la conclusión de que lograr una fuerte excepción de seguridad probablemente no valga la pena. –