Uso gli eventi come parte di un modello di gioco e, per motivi di estensibilità e codice "località", devo essere in grado di porre il veto sulla maggior parte delle azioni.Esiste un modo standard per implementare eventi "Vetoable"?
Più chiaramente, quasi ogni metodo che ha un effetto collaterale assume questa forma:
public event TryingToDoSomethingHandler TryingToDoSomething;
public event SomethingHappenedHandler SomethingHappened;
/*
* Returning true indicates Something happened successfully.
*/
public bool DoSomething(...)
{
//Need a way to indicate "veto" here
TryingToDoSomething(...);
//Actual do it
SomethingHappened(...);
return true;
}
Quello che mi piacerebbe è per TryingToDoSomething (...) per essere in grado di indicare che un evento registrato oggetti gestore (restituendo false, modificando un parametro out, o qualcosa del genere). In modo che il codice è moralmente equivalente a:
/*
* Returning true indicates Something happened successfully.
*/
public bool DoSomethingImproved(...)
{
//Pretty sure multicast delegates don't work this way, but you get the idea
if(!TryingToDoSomething(...)) return false;
//Actual do it
SomethingHappened(...);
return true;
}
C'è un modo accettato o standard per fare questo in C#/NET.?
Le mie radici di Java (naming) mi ostacolano ancora una volta. Questo e 'esattamente quello che stavo cercando. –