sexta-feira, 11 de outubro de 2013

Tipo Dynamic no C# 4.0

Dynamic é um novo tipo que foi adicionado ao c # 4.0.Dynamic são declarados com a palavra-chave dynamic. Os objetos deste tipo não são verificados em tempo de execução (compilação). Ele se comporta como o tipo Object na maioria dos casos. Qualquer tipo de objeto pode ser atribuído ao tipo Dynamic. Também podemos obter seu valor através do HTML Document Object Model (DOM) ou por API COM. Caso contenha erros em seu código são avaliados em tempo de execução (compilação).

C# era uma linguagem estática. Isto significa que se o compilador não conseguiu encontrar o método de um objeto em seguida ele vai dar erro de compilação.
Declarando em tempo de execução o tipo Dynamic, termos um objeto fortemente tipado.
Diferença entre o objeto, Var e tipo Dynamic
 Se nós executarmos o seguinte código:

dynamic dyn = 0;
object obj = 0;
var var = 0;
System.Console.WriteLine(dyn.GetType());
System.Console.WriteLine(obj.GetType());
System.Console.WriteLine(var.GetType());

Iremos iniciar o tempo de execução de todos os objetos, dinâmicos e variável como System.Int32. Mais o tipo Var está disponível em todo tempo de compilação.
Mas agora, se somarmos as duas instruções a seguir a segunda instrução dará erro de compilação tempo, porque a expressão é do tipo verificado em tempo de compilação, enquanto a primeira declaração compilado com êxito, porque as expressões do tipo dinâmico não são do tipo verificado em tempo de compilação e da variável var é do tipo atribuído o tipo de dados apropriado em tempo de compilação em si.
dyn = dyn + 1;
obj = obj + 1;
var = var + 1;
Se nós executarmos o seguinte código:

 class Dynamic
{
    static void Main(string[] args)
    {
        dynamic dyn;
        string str = "Dynamic tipo testar.String";
        StringBuilder sb = new StringBuilder();
        sb.Append("Dynamic tipo testar.StringBuilder");
        dyn = str;
        DynamicFunction(dyn);// Iremos chamar a primeira função, pois em tempo de execução o tipo Dynamic é do tipo String
        dyn = sb;
        DynamicFunction(dyn);// Iremos chamar a primeira função, pois em tempo de execução o tipo Dynamic é do tipo String construtor.
        Console.Read();
    }
    public static void DynamicFunction(string s)
    {
        Console.WriteLine(s);
    }
    public static void DynamicFunction(StringBuilder sb)
    {
        Console.WriteLine(sb.ToString());
    }
}

Teremos a seguinte saída:
Dynamic tipo testar.String
Dynamic tipo testar.StringBuilder

Bons estudos.

0 comentários:

Postar um comentário