Hoje o assunto é sobre um novo recurso implantado no C# 4.0, o dinamismo. Conheço desenvolvedores que não gostam dessa idéia, afirmam que é um retrocesso abandonar a tipagem estática para deixar toda a checagem em tempo de execução. Eu como defensor de novos recursos nas linguagens gostei da novidade e de saber que posso contar com esse recurso caso o julgue necessário, pode até ser perigoso, mas todo recurso pode ser perigoso se não for utilizado de forma adequada, e não é privando o desenvolvedor de recursos que vamos evitar os códigos ruins.
Na minha opnião, o grande lance de se ter o recurso do dinamismo no C# é que o C# por natureza é tipado estaticamente e o meu pensamento foi: “Maravilha, eles vão juntar o melhor dos 2 mundos que é a checagem em tempo de compilação dos trechos tipados estaticamente associado ao poder da inferência de tipos que o C# já possui, e também vamos poder usufruir da checagem somente em runtime nos objetos tipados como dynamic. Isso vai ficar muito interessante.”, quando de repente me deparei com a seguinte situação ao acompanhar o seguinte post no .NET Unplugged,


static int Funcao(int z) {
    return 1;
}


static void Main() {
    dynamic x = 3;
    DateTime y = Funcao(x);
}

como assim a DLR passa por cima da tipagem estática e trata toda a chamada de um método tipado estáticamente como se fosse dinâmico? Pois este trecho de código retirado do blog citado acima só dá erro em runtime. Eu achava que o recurso dynamic fosse mais inteligente, e nesse caso por exemplo o compilador tinha toda a informação necessária para dar erro em tempo de compilação, a única checagem em runtime que deveria haver na minha opnião é se a variável x pode ser tratada como um int, pois é o tipo de dado que a Funcao espera.
Bom, mesmo não concordando com este comportamento em específico citado acima, ainda acho interessante ter acesso ao recurso dynamic na linguagem, apenas teremos que utilizar com muito cuidado.
E vocês, o que acham deste novo recurso que foi disponibilizado nessa nova versão do C#?