2011-04-22 19 views
7

Puede alguien decirme si es o lo que la diferencia de las siguientes afirmaciones es:añadir un controlador de eventos

MyObject.MyEvent += new EventHandler(MyEventHandlerMethod); 
vs. 
MyObject.MyEvent += MyEventHandlerMethod; 

cada vez que presiono += la primera opción aparece al hacer clic en la pestaña de modo que siempre he dejado. pero me pregunto si puedo escribir el segundo. Supongo que ambos se compilan de la misma manera, pero tengo curiosidad si eso es cierto. Estoy bastante seguro de que podría mirar el IL, pero soy demasiado flojo para eso :), prefiero solo preguntar.

+0

posible duplicación de [Controladores de eventos C#] (http://stackoverflow.com/questions/26877/c-sharp-event-handlers) – nawfal

Respuesta

7

La primera variante fue necesaria en el primer compilador de C#. Las versiones posteriores no lo requieren; el segundo es estrictamente equivalente al primero y el compilador proporcionará la llamada al constructor.

Dado que la segunda variante es más corta, elimina la redundancia innecesaria y no tiene inconvenientes, aconsejo usarla, en lugar de la versión explícita. Por otro lado, el IDE lamentablemente solo ofrece la finalización del código inteligente para la primera versión, por lo que es posible que desee ir con él.

+1

Not Exactly. Ver mi respuesta Ambas compila a la misma cosa que SomeEvent + = NamedMethod. Pero si planea eliminar ese controlador de eventos más tarde, realmente debería guardar el delegado. – Priyank

+0

@Priyank No, no hay necesidad de eso. '- =' funciona bien con cualquier forma, también. –

1

Son idénticos. No hay diferencia. La segunda forma es esencialmente una abreviatura de la primera y producirán IL idéntica.

0

Por lo tanto, la conclusión de esto es escribir SomeEvent += new EventHandler(NamedMethod) se compila a la misma cosa que SomeEvent += NamedMethod. Pero si planea eliminar ese controlador de eventos más tarde, realmente debería guardar el delegado.

Ref: += new EventHandler(Method) vs += Method

Difference between ‘ += new EventHandler’ and ‘ -= new EventHandler(anEvent)’

+0

Se trata de esto, pero estoy de acuerdo con otras respuestas en la primera publicación que dice que salvar al delegado es una micro-optimización que en ** la mayoría de las situaciones ** es innecesario – Jose

+0

¿Alguna razón para el voto a la baja? – Priyank

+0

No te he votado, ni veo un motivo para un voto negativo – Jose

2

son la misma. La primera declaración se deduce por la segunda y se maneja para usted en la plomería.

Cuestiones relacionadas