Pergunta

Em C#, qual é a diferença (se houver) entre essas duas linhas de código?

tmrMain.Elapsed += new ElapsedEventHandler(tmrMain_Tick);

e

tmrMain.Elapsed += tmrMain_Tick;

Ambos parecem funcionar exatamente da mesma forma.O C# apenas assume que você quer dizer o primeiro quando digita o último?

Foi útil?

Solução

eu fiz isso

static void Hook1()
{
    someEvent += new EventHandler( Program_someEvent );
}

static void Hook2()
{
    someEvent += Program_someEvent;
}

E então executei o ildasm no código.
O MSIL gerado foi exatamente o mesmo.

Então, para responder à sua pergunta, sim, eles são a mesma coisa.
O compilador está apenas inferindo que você deseja someEvent += new EventHandler( Program_someEvent );
- Você pode ver isso criando o novo EventHandler objeto em ambos os casos no MSIL

Outras dicas

Antigamente (.NET 1.x dias) o formato longo era a única maneira de fazer isso.Em ambos os casos, você está criando um delegado para apontar para o método Program_someEvent.

Eu não acho que haja alguma diferença.Certamente o resharper diz que a primeira linha possui código redundante.

Um pouco offtopic:

Você poderia instanciar um delegado (new EventHandler(MethodName)) e (se apropriado) reutilizar essa instância.

Não foi o new XYZEventHandler require até C#2003 e você tinha permissão para omitir o código redundante em C#2005?

Acho que a única maneira de saber realmente seria observar o MSIL produzido para o código.Tende a ser um bom teste ácido.

Tenho preocupações engraçadas de que isso possa de alguma forma atrapalhar o GC.Parece estranho que haveria toda a sobrecarga de declarar o novo tipo de delegado se isso nunca precisasse ser feito dessa maneira, sabe?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top