Dynamic Types no C# 4.0

3,021 views

Published on

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.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,021
On SlideShare
0
From Embeds
0
Number of Embeds
583
Actions
Shares
0
Downloads
42
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Dynamic Types no C# 4.0

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

×