Первый полезен и нормален для нетривиальных объемов кода или для случаев, когда вы хотите повторно использовать код (вы можете сделать это с помощью анонимного метода путем захвата в переменную, но он теряет блеск несколько ...)
Второй и третий в значительной степени идентичны (по крайней мере, в C # 3.0) и действительно удобны для коротких блоков кода. На самом деле, есть 4-й вариант, полезный, если вам не нужны аргументы:
MyElement.Keyup+= delegate { /* code */ };
Заметьте, нам не нужно было объявлять аргументы (компилятор пишет совместимую подпись, которая просто не использует их). Вышеприведенный трюк, вероятно, не очень удобен для событий Click
(я предполагаю, что для KeyUp
вас интересует, какая клавиша была нажата, поэтому, вероятно, не используйте эту 1011 * в вашем сценарии).