2011-03-29 4 views
6

¿Cuál es la diferencia entre los dosdiferencia entre los eventos de cableado utilizando "nuevo manejador de sucesos <T>" y no con nuevas manejador de sucesos <T> "

object.ProgressChanged += new EventHandler<ProgressChangedEventArgs>(object_ProgressChanged) 

object.ProgressChanged += object_ProgressChanged; 

    void installableObject_InstallProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 
     EventHandler<ProgressChangedEventArgs> progress = ProgressChanged; 
     if (installing != null) 
      installing(this, e); 
    } 

EDIT:??

Si no hay diferencia, que es la mejor opción?

Gracias!

+1

La primera es más larga que la otra ... –

+1

Esta pregunta ha sido respondida antes. http://stackoverflow.com/questions/2749868/new-eventhandlermethod-vs-method –

+1

posible duplicado de [¿Cuál es la diferencia entre Eventos con Gestores delegados y aquellos sin?] (http://stackoverflow.com/questions/119160/what-is-the-difference-between-events-with-delegate-handlers-and-those-without) – Oliver

Respuesta

6

Básicamente, uno es más corta que la otra. es simplemente el azúcar synctactic.

La sintaxis "correcta" es la primera, ya que ProgresChanged es un evento EventHandler, por lo que para asignarle un controlador real, debe crear un nuevo objeto EventHandler, cuyo constructor toma como parámetro el nombre de un método con la firma requerida.

Sin embargo, si solo especifica el nombre del método (segunda sintaxis), se crea implícitamente una instancia de la clase eventHandler y esa instancia se asigna al evento ProgressChanged.

Prefiero usar el segundo método porque es más corto y no pierde ninguna información. No hay muchos contextos en los que pueda confundir un constructo += methodName con otra cosa.

3

Sin diferencia. El segundo será convertido implícitamente al primero por el compilador.

5

Sin diferencia. Se genera el mismo ilcode.

En cuanto a cuál es mejor: utilizo las segundas opciones ya que es un código más limpio = más fácil de leer.

0

No hay diferencia entre los dos, son iguales. De hecho, este último es solo un atajo y se compilará como el anterior.

Riana

Cuestiones relacionadas