Venho com essa dúvida há algum tempo me incomodando. Quando o tipo dynamic é definido? Naturalmente, se levarmos em consideração os conceitos de linguagens, se um tipo não é conhecido em tempo de compilação ele é conhecido em tempo de execução. Mas me parece que nem para o dynamic, esse conceito é válido.
De acordo com a definição dele da própria referência da MS (https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/keywords/dynamic), "O tipo dynamic habilita operações nas quais ele ocorre para ignorar a verificação de tipo em tempo de compilação. Em vez disso, essas operações são resolvidas em tempo de execução.". Isso não quer dizer que o tipo dele "somente é conhecido em tempo de execução", como é mencionado na aula 04, atividade 02, aos 14:30 segundos.
Na verdade, segundo a documentação: "O tipo dynamic se comporta como o tipo object na maioria das circunstâncias. No entanto, as operações que contêm expressões do tipo dynamic não são resolvidas ou verificadas pelo compilador. O compilador junta as informações sobre a operação em pacotes e, posteriormente, essas informações são usadas para avaliar a operação em tempo de execução. Como parte do processo, as variáveis do tipo dynamic são compiladas em variáveis do tipo object. Portanto, o tipo dynamic existe somente em tempo de compilação e não em tempo de execução.".
Então, contrariando um pouco aquilo que aprendemos sobre tempo de compilação e tempo de execução, acredito que seja errado dizer que o tipo dynamic é conhecido somente em tempo de execução. Essa afirmação, apesar de fazer algum sentido, é errada.
Aguardo um parecer.
[]s