[Resolvidos]Sintaxe para eventos em C#

A seguinte linha foi gerada pelo Visual Studio no evento KeyDown

Eu não entendi porque o objeto KeyEventHandler está sendo concatenado ao atributo KeyDown. Isso quer dizer que eu posso ter vários objetos associados ao atributo KeyDown? Como funciona isso?

Até algum especialista na linguagem aparecer e te dar mais informações com informação técnica correta, adianto:

Sim… você pode ter vários handlers associados ao mesmo evento…

Se não me engano você pode utilizar o operador -= se quiser retirar algum handler também.

[quote=AbelBueno]Até algum especialista na linguagem aparecer e te dar mais informações com informação técnica correta, adianto:

Sim… você pode ter vários handlers associados ao mesmo evento…

Se não me engano você pode utilizar o operador -= se quiser retirar algum handler também.

[/quote]

Ai eu pergunto: quando o evento onClick for chamado, ele irá escolher qual handler?

Os dois. Só não sei em qual ordem…

Agora, uma dúvida: não me leve a mal, mas você não tem um Visual Studio rodando aí para ver o que acontece?
Nada como ver a acontecendo para entender como funciona.

Na verdade, isso aí é chamado de combined delegate.

Todos os delegates do C# podem ser combinados, num único delegate, que faz a chamada de todos em sequencia. Na prática, é o mesmo que ter uma lista desse exemplo, e o C# fará a chamada sequencialmente nessa lista.
Delegates são adicionados a lista com += e removidos com -=.

Veja exemplos na MSDN:
http://msdn.microsoft.com/en-us/library/aa664603(v=VS.71).aspx
http://msdn.microsoft.com/en-us/library/aa664603(v=VS.71).aspx

A ordem usada é a ordem de inserção.

[quote=ViniGodoy]Na verdade, isso aí é chamado de combined delegate.

Todos os delegates do C# podem ser combinados, num único delegate, que faz a chamada de todos em sequencia. Na prática, é o mesmo que ter uma lista desse exemplo, e o C# fará a chamada sequencialmente nessa lista.
Delegates são adicionados a lista com += e removidos com -=.

Veja exemplos na MSDN:
http://msdn.microsoft.com/en-us/library/aa664603(v=VS.71).aspx
http://msdn.microsoft.com/en-us/library/aa664603(v=VS.71).aspx

A ordem usada é a ordem de inserção.[/quote]

Opa Vini, desculpa a demora a responder. Entendi agora.
Me tira só mais uma dúvida:

comboBox1_KeyDown é um método. KeyEventHandler está recebendo uma espécie de ponteiro pra função, é isso?
Até mais e obrigrado pela resposta.

Sim. O delegate é uma espécie de ponteiro de função (ou funçoes). Mas ele funciona para métodos também, nesse caso, o c# manterá a instancia do objeto ativa enquanto seu metodo estiver num delegate. São um otimo substituto para aquelas interfaces com um só método (como a Runnable ou ActionListener do Java).

Hum, entendi. Tava vendo esse artigo do site da Microsoft sobre delegates. Não sabia desse recurso do C#, se bem que eu conheço a linguagem há pouco tempo. Cada vez mais me surpreendo com C#, até assembly inline eu descobri que a linguagem suporta.
Valeu ViniGodoy e AbelBueno pelos esclarecimentos.