Tucão, que pergunta maravilhosa, até escorreu uma lágrima..... serio mesmo, ótima pergunta:
Reflection, existe situações em que você precisa adicionar funcionalidades em algum assemblie, ou até mesmo escrever um assemblie, tudo isso em tempo de execução, é ae que entra o reflection.... ou uma coisa mais simples como examinar um assemblie em runtime...
Delegate: ele permite flexibilidade, eu concordo com vc, olhando assim parece que não tem utilidade, mas em determinadas situações ele cai como uma luva....
Você consegue definir um método como parâmetro e isso é bacana quando vc precisa chamar métodos de callback...
Entendo que é um pouco confuso, mas algumas coisas
você só vai entender mesmo quando colocar a mão na massa....
Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCTS