dynamic types no c# 4.0
DESCRIPTION
Apresentação sobre tipos dinâmicos no .NET 4 e c# 4.0.A apresentação foi feita com uma série de demos, baixe-as no site: http://viniciusquaiato.com para compreender melhor.TRANSCRIPT
![Page 1: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/1.jpg)
Dynamic TypesProgramação dinâmica no C# 4.0
Vinicius Quaiato http://viniciusquaiato.com
![Page 2: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/2.jpg)
Agenda Programação dinâmica DLR – Dynamic Language Runtime IronRuby e IronPython
Demonstração
Dynamic no C# 4.0 Demonstração
ExpandoObject Demonstração
DynamicObject Demonstração
Vinicius Quaiato - http://viniciusquaiato.com
![Page 3: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/3.jpg)
Is .NET becoming impossible?
Vinicius Quaiato - http://viniciusquaiato.com
![Page 4: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/4.jpg)
Programação Dinâmica Linguagens dinâmicas foram populares
na década de 80; Linguagens versáteis, utilizadas
principalmente para script programming;
Não existe verificação de tipo; Recomeçaram a ganhar força nos anos
2000 devido a grande demanda web.
Vinicius Quaiato - http://viniciusquaiato.com
![Page 5: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/5.jpg)
Programação Dinâmica
Vinicius Quaiato - http://viniciusquaiato.com
![Page 6: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/6.jpg)
O que é isso?!
Vinicius Quaiato - http://viniciusquaiato.com
![Page 7: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/7.jpg)
Linguagens Dinâmicas PHP, Ruby e Python dominam este
mercado; São menos verbosas e complicadas que
as linguagens estaticamente tipadas; Alterações e Refactorings não exigem
recompilações; É necessário ter cuidado e atenção pois
não há compilador para alertar erros.
Vinicius Quaiato - http://viniciusquaiato.com
![Page 8: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/8.jpg)
DLR – Dynamic Language Runtime Código .NET é compilado e
estaticamente tipado; DLR é um novo “pedaço” do
framework .NET; Faz uma espécie de “meio de campo”
entre linguagens e capacidades dinâmicas e linguagens estaticamente tipadas
Vinicius Quaiato - http://viniciusquaiato.com
![Page 9: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/9.jpg)
DLR – Dynamic Language Runtime
Vinicius Quaiato - http://viniciusquaiato.com
![Page 10: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/10.jpg)
Vinicius Quaiato - http://viniciusquaiato.com
![Page 11: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/11.jpg)
IronRuby e IronPython Iron – Implementation Running on .NET; São implementações fidedignas das
linaguagens rodando no .NET; IronPython já está em sua versão 2.6; IronRuby está em RC, com cerca de
86% da RubySpec implementada;
Vinicius Quaiato - http://viniciusquaiato.com
![Page 12: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/12.jpg)
IronRuby e IronPython Linguagens simples e poderosas; Possível desenvolver para web, console,
desktop, etc; Há grande suporte de suas comunidades; Proporciona mais opções dentro do
framework; Ainda não há suporte de intellisense e
templates no Visual Studio.
Vinicius Quaiato - http://viniciusquaiato.com
![Page 13: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/13.jpg)
Demonstração Console Interativo IronRuby Asp.Net MVC com IronRuby
Vinicius Quaiato - http://viniciusquaiato.com
![Page 14: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/14.jpg)
Vinicius Quaiato - http://viniciusquaiato.com
![Page 15: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/15.jpg)
O tipo Dynamic Novo tipo introduzido no .NET 4.0; Dynamic pode ser TUDO; É um tipo estático, porém diz ao
compilador para dar “by pass” nas validações estáticas;
É criado com a palavra reservada dynamic;
As operações realizadas são avaliadas somente em tempo de execução.
Vinicius Quaiato - http://viniciusquaiato.com
![Page 16: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/16.jpg)
O tipo Dynamic Dynamic nos obriga a ser mais
atencioso; Não há suporte para operações pelo
intellisense; Erros em tempo de execução podem
acontecer; É uma deixa para largarmos de ser
preguiçosos.
Vinicius Quaiato - http://viniciusquaiato.com
![Page 17: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/17.jpg)
Por que usar dynamic? Algumas aplicações talvez nunca
precisem usar dynamic; A criação de frameworks, APIs e DSLs
podem ser facilitadas com seu uso; A criação de DTOs pode ser feita com
dynamic; Na criação e manipulação de
dados/objetos e situações que não são previsíveis.
Vinicius Quaiato - http://viniciusquaiato.com
![Page 18: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/18.jpg)
Por que usar dynamic? Existem diversos cenários onde usar, e
as validações em tempo de execução não são motivo para não usar;
A sintaxe “string-indexer-based” corre os mesmos riscos: var dataTable = new DataTable(); var valor = dataTable[0][“Coluna”];
Vinicius Quaiato - http://viniciusquaiato.com
![Page 19: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/19.jpg)
Por que usar dynamic? Facilita a utilização de técnicas como
Reflection e COM Interop;
Vinicius Quaiato - http://viniciusquaiato.com
![Page 20: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/20.jpg)
Por que usar dynamic? Permite a integração com linguagens
dinâmicas com IronPython e IronRuby; É possível consumir classes e executar
código escrito nestas linguagens dentro do C#;
Se há uma boa biblioteca em outra linguagem, por que não usar?
Vinicius Quaiato - http://viniciusquaiato.com
![Page 21: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/21.jpg)
Demonstração Consumindo e criando código IronRuby
dentro do C# 4.0
Vinicius Quaiato - http://viniciusquaiato.com
![Page 22: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/22.jpg)
Vinicius Quaiato - http://viniciusquaiato.com
![Page 23: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/23.jpg)
ExpandoObject Representa um objeto que pode ter
propriedades e métodos adicionados e/ou removidos dinamicamente;
Seus membros são avaliados em runtime; Sua sintaxe é mais amigável do que
trabalhar com indexers (syntax sugar); Pode funcionar de maneira case insensitive; Expandoobjects podem ser compartilhados
entre linguagens do DLRVinicius Quaiato -
http://viniciusquaiato.com
![Page 24: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/24.jpg)
ExpandoObject Implementa as seguintes interfaces;
IDynamicMetaObjectProvider IDictionary<string, object> ICollection<KeyValuePair<string,
object>> IEnumerable<KeyValuePair<string,
object>> IEnumerable, INotifyPropertyChanged
Vinicius Quaiato - http://viniciusquaiato.com
![Page 25: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/25.jpg)
Demonstração Criando ExpandoObject
Vinicius Quaiato - http://viniciusquaiato.com
![Page 26: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/26.jpg)
Vinicius Quaiato - http://viniciusquaiato.com
![Page 27: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/27.jpg)
DynamicObject Diferente de ExpandoObject a classe
DynamicObject deve ser herdada; Provê meios de decidir como os
métodos e propriedades serão executados caso não existam;
Uma classe que herda de DynamicObject pode possuir membros;
Vinicius Quaiato - http://viniciusquaiato.com
![Page 28: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/28.jpg)
DynamicObject Possui uma série de métodos que
podem ser sobrescritos, alguns deles são:
Vinicius Quaiato - http://viniciusquaiato.com
Método DescriçãoTryGetMember Provê uma implementação para operações que obtém
valores de propriedades.
TrySetMember Provê uma implementação para operações que alteram valores de propriedades.
TryInvokeMember
Provê uma implementação para operações de chamada de métodos.
TryGetIndex Provê uma implementação para operaçoes de acesso à índices.
TrySetIndex Provê uma implementação para operações que alteram valores de índices.
![Page 29: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/29.jpg)
Demonstração Criando e trabalhando com
DynamicObject
Vinicius Quaiato - http://viniciusquaiato.com
![Page 30: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/30.jpg)
Considerações Pode ser que sua aplicação/projeto não precise de
dynamic agora, mas dizer que nunca precisarão pode ser um erro;
Os avanços do .NET nesta nova versão são grandes, e já surgem produtos utilizando estas novas features dinâmicas;
Tarefas que seriam complexas e “feias” de serem feitas com C# 3.5- podem ser feitas de forma simples e eficiente com dynamic à partir de agora;
Com a integração do Ruby e Python a comunidade .NET começa a avançar ainda mais, o que é bom para o framework e para o mercado;
Vinicius Quaiato - http://viniciusquaiato.com
![Page 31: Dynamic Types no C# 4.0](https://reader035.vdocuments.us/reader035/viewer/2022062704/555cf3a7d8b42a08668b4d57/html5/thumbnails/31.jpg)
Links e Referências Documentação do tipo dynamic
http://tinyurl.com/NetDynamicDoc Documentação ExpandoObject
http://tinyurl.com/NetExpandoDoc Documentação DynamicObject
http://tinyurl.com/NetDynamicObjDoc Documentação DLR – Dynamic Language Runtime
http://tinyurl.com/NetDLRDoc Posts sobre DynamicObject e ExpandoObject
http://viniciusquaiato.com/blog/index.php/tag/dynamic IronRuby CodePlex
http://ironruby.codeplex.com/ IronPython CodePlex
http://ironpython.codeplex.com/Vinicius Quaiato -
http://viniciusquaiato.com