2010-03-06 11 views

Respuesta

4

Nº C# lambdas no son compatibles con los eventos, así que no hay manera de representar esto. Tendrás que usar la reflexión.

+0

No quiero usar cosas como "GetEventInfo (button1," Click ") debido a la entrada con el nombre de la cadena de eventos. ¿Hay alguna otra manera de obtener el 100% correcto del nombre del evento o referencia a EventInfo o delegar add_/remove_ metod of event? Alguna forma de AOP u otra cosa? Gracias – TcKs

+2

@TcKs - en realidad no. Opciones: (1) usar una interfaz para exponer su evento, y enviarlo a esa interfaz; (2) (solo se aplica a '* Modificado') use abstracción como' PropertyDescriptor' que puede mapear propiedades para hacer coincidir eventos en su nombre; (3) vivir con las cuerdas (con algunas pruebas unitarias). Creo que a todos nos encantaría la 'infoof' faltante operador aquí, pero no existe. Seguimos preguntando ... –

+0

Gracias por sugerencias – TcKs

6

Sí, es como obtener el nombre de la propiedad, pero debe hacerlo en la clase que define el evento.

public class Foo 
{ 
    public event EventHandler Bar; 

    public string BarName 
    { 
     get 
     { 
      return this.GetEventName(() => this.Bar); 
     } 
    } 

    private string GetEventName(Expression<Func<EventHandler>> expression) 
    { 
     return (expression.Body as MemberExpression).Member.Name; 
    } 
} 

Enjoy.

+0

Si entiendo bien, en este caso es "this.Bar" aceptado como f campo, no? Funcionará igual con "evento público EventHandler Bar" y "público EventHandler Bar", ¿verdad? Esto no es útil para mi propósito (estoy usando clases de terceros), pero puede ser una solución en algunos casos. ¡Gracias por responder! (+1) – TcKs

+0

Sí, me temo que tienes razón. Solo puede usar este enfoque en la clase que define el evento. – Enigmativity

Cuestiones relacionadas