|
|
Publicado em 07/07/2016 10:15:06
|
|
|

dinâmica é uma nova funcionalidade do FrameWork 4.0. O surgimento da dinâmica deu ao C# as características de um tipo de linguagem fraco. O compilador não verifica mais o tipo em tempo de compilação, e o objeto dinâmico suporta qualquer recurso que você quiser por padrão durante a compilação. Por exemplo, mesmo que você não saiba nada sobre o objeto retornado pelo método GetDynamicObject, você pode fazer uma chamada de código assim, e o compilador não reportará um erro:
Quando se trata de uso correto, um uso errado deve ser apontado primeiro:
As pessoas frequentemente usam a palavra-chave var para comparar com dinâmica. Na verdade, var e dinâmica são completamente dois conceitos e não devem ser comparados juntos. Uma vez compilado, o tempo de compilação corresponde automaticamente ao tipo real da variável var e substitui a declaração da variável pelo tipo real, que parece que estamos declarando o tipo real ao codificar. Após a compilação dinâmica, ele é na verdade um tipo de objeto, mas o compilador fará um tratamento especial ao tipo dinâmico, de modo que não realiza nenhuma verificação de tipos durante a compilação, mas coloca a verificação de tipo no tempo de execução.
Isso pode ser visto na janela do editor no Visual Studio. Variáveis declaradas como vars suportam "sentido inteligente" porque o Visual Studio pode inferir o tipo real de tipos de var, enquanto variáveis declaradas como dinâmicas não suportam "sentido inteligente" porque o compilador não sabe nada sobre o tipo de seu tempo de execução. Usar o Intelligent Sense para variáveis dinâmicas indica "Esta ação será resolvida em tempo de execução".
O fato de a variável dinâmica ser uma variável objeto pode ser verificado pelo código IL, e o código IL não será postado aqui. Claro, o compilador também lida com declarações dinâmicas para distinguir entre variáveis de objeto diretas.
dinâmica é amplamente renderizada em MSDN para simplificar a interoperabilidade, e sinto que é com base nisso que alguns desenvolvedores são mal compreendidos: como muitos desenvolvedores não sabem usar códigos como COM+ e desenvolvimento secundário no OFFICE, eles precisam urgentemente de uma razão dinâmica para a aplicação. Então, no desenvolvimento diário, acho que dinâmico é valioso:
Conversão de tipos A transição entre instâncias do tipo Dinâmico e outros tipos de instâncias é simples, e os desenvolvedores podem facilmente alternar entre comportamentos dinâmicos e não dinâmicos. Qualquer instância pode ser convertida implicitamente em uma instância do tipo dinâmico, veja o seguinte exemplo: dinâmica d1 = 7; dinâmica d2 = "uma corda"; dinâmica d3 = System.DateTime.Today; dinâmico d4 = System.Diagnostics.Process.GetProcesses(); Por outro lado, uma conversão implícita pode ser aplicada dinamicamente a qualquer expressão de dinâmica de tipos. E vice-versa, qualquer expressão de dinâmica de tipos também pode ser implicitamente convertida para outros tipos. int i = d1; string str = d2; DateTime dt = d3; System.Diagnostics.Process[] procs = d4; Problema de sobrecarga com parâmetros de tipo dinâmico no método Se um método é chamado de passes a um objeto de tipo dinâmico, ou o objeto chamado é de tipo dinâmico, então o julgamento de sobrecarga ocorre em tempo de execução e não em tempo de compilação. DLR em tempo de execução de linguagem dinâmica O tempo de execução dinâmico da linguagem é . NET Framework 4 Beta 1 é um novo conjunto de APIs que oferecem suporte para tipos dinâmicos em C# e também implementam linguagens de programação dinâmicas como IronPython e IronRuby. Dinâmica simplifica reflexões.
Anteriormente, usávamos reflexões assim:
Agora temos uma forma simplificada de escrever:
Podemos ser desdenhosos com essa simplificação, afinal, parece que o código não foi muito reduzido, mas se levarmos em conta as duas características de eficiência e beleza, então as vantagens da dinâmica são óbvias. O compilador otimiza a dinâmica para ser muito mais rápida do que a eficiência de reflexão não cacheada. Se precisar comparar, pode rodar o código dos dois acima (a parte do método de chamada Adicionar) por 1000000 para tirar uma conclusão.
|
Anterior:o mvc recupera os dados XML JSON para a postagemPróximo:Ocorreu um erro de reconhecimento. Perto da Linha 1, Coluna 10
|