O tema principal do C# 4 é a programação dinâmica, sendo que
os objetos estão cada vez mais dinâmicos.
Covariance and Contravariance.
Primeiro vamos falar um pouco da linguagem dinâmica.
Dynamic
O Visual Studio C# 2010 introduz um novo tipo, o tipo
dinâmico. Ela funciona de forma dinâmica, mas ele é estático, um objeto ignora
a verificação do tipo estático em tempo de compilação, como se fosse um object,
mas mais poderoso. Em tempo de compilação ele assume qualquer operação.
Não esquecendo que o C# ainda é linguagem de Tipagem
estática.
Ficou meio confuso o entendimento, então vamos à prática:
Exemplo
ex = new Exemplo();
ex.metodo1(10,4);
public class Exemplo
{
public void metodo1(int x)
{
}
}
O papel do compilador neste exemplo, é analisar um conjunto
de informações, o que cada instrução propõe a fazer em tempo de execução, e
qualquer declaração inválida, provoca uma exception.
O mesmo exemplo só que agora usando o Dynamic.
dynamic
ex = new Exemplo();
ex.metodo1(10, 4);
public class Exemplo
{
public void metodo1(int x)
{
}
}
Nesse caso o compilador do C#, irá compilar e
somente em runtime será lançada uma Exception
Qualquer objeto pode ser implicitamente convertido para
dinâmico, usando o boxing e o unboxing.
Na variável dynamic não existe o intellisense, porque o seu
tipo ainda não é conhecido, isso acontece somente em runtime.
Para alguns casos, é preciso tomar algum cuidado na criação
de método, usando o bom sendo e passar aquilo que se espera fazer.
Veja o código abaixo. Se você espera que o retorno seja um
valor numérico, mas se ele for passado como string, ao invés de somar ele será
concatenado.
dynamic a=”hello”;
dynamic b=”world”;
return a + b;
A variável dynamic sempre predominará dentro de operação,
como no código abaixo:
dynamic a = 1;
var count = a + 1;
A variável count não será um valor inteiro e sim um Dynamic.
Dynamic Language Runtime é chamado de DLR e é uma nova API
do framework 4.0. Ele fornece infra-estrutura que suporta o tipo dinâmico em C#
e também a linguagem de programação como IronPython e IronRuby. O DLR tem um
excelente mecanismo de cachê que aumenta consideravelmente o transporte em
tempo de execução.
Você também pode criar seu próprio objeto dinâmico, usando a
interface IDynamicObject que permite interagir com o DLR.
Fica sem sentido essa nova funcionalidade se usarmos de
maneira simples, mas se utilizarmos com outras novidades, que falarei mais
adiante, você terá todo o poder dessa nova feature.
Nos próximos artigos irei falar sobre as outras features.
http://www.nandosilva.com
Até logo.