¿Cuál es la sintaxis para devolver un evento desde una función? (No para llamar al evento, devolverlo para que pueda estar vinculado a las funciones).Devolución de un evento de una función
Tengo una clase contenedor que contiene un diccionario donde cada miembro tiene un evento.
El objetivo es ser capaz de escribir algo como esto:
claseContainer c = new Container();
c.CreateEventForKey("a"); // Create the member in the dictionary
c.EventForKey("a") += some_function; // Bind some_function to the event in the "a" member
c.OnEventForKey("a","b"); // Calls some_function with argument "b"
The Container se ve así:
public class Container {
public class Member {
public event Action<string> AnEvent;
public void OnEvent(string v) { if(AnEvent!=null) { AnEvent(v); } }
}
protected Dictionary<string,Member> members;
// This seems to work OK.
public void OnEventForKey(string k, string v) {
if (members.ContainsKey(k)) { members[k].OnEvent(v); }
else { /* report error */ }
}
// Can't get this to compile.
public event Action<string> EventForKey(string k) {
if (members.ContainsKey(k)) { return members[k].AnEvent; }
else { /* report error */ }
}
}
¿Cómo puedo definir EventForKey
por lo que este hace lo que espero?
No creo que pueda devolver un evento, pero puede devolver un delegado que pueda vincularse a un evento. ¿Es eso lo que quieres decir? –
Creo que solo necesita eliminar la palabra clave de evento de su declaración de AnEvent, así como del tipo de devolución de EventForKey. –
@IanNewson: la parte clave de lo que estoy teniendo problemas es 'c.EventForKey (" a ") + = some_function;'. Prefiero escribir eso que los engorrosos 'c.members [" a "]. AnEvent + = some_function', (ya que puedo agregar la comprobación de errores y el registro a la primera versión, pero no a la segunda). –