Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
As Novidades Do C#<br />
Paulo Morgado<br />
A Evolução ao C#<br />Covariância e Contravariância<br />Argumentos com Nome e Opcionais<br />Programação Dinâmica<br />Me...
A Evolução do C#<br />
A Evolução do C#<br />
Tendências<br />
Dinâmico vs. Estático<br />
VB<br /><ul><li>Argumentos com nome
Argumentos opcionais
Propriedades indexadas (COM)
Instrucções Lambda
Propriedades auto-implementadas
Inicializadores de colecções</li></ul>C#<br />C#<br />VB<br />Co-Evolução<br />
A Evolução do C#<br />
A evolução do C#<br />http://paulomorgado.net/pt/blog/archive/2010/04/12/a-evolu-231-227-o-do-c.aspx<br />Recursos<br />
Covariância e Contravariância<br />
Em álgebra multilinear, covariância e contravariância descrevem como a descrição quantitativa de certas entidades geométri...
O tipo T é maior (>) que o tipo S se S é um subtipo (deriva) de T<br />Covariância e Contravariância<br />T≥S<br />typeof(...
Dados 2 tipos Base e Derivado, em que:<br />Existe uma conversão por referência (ou identidade) entre Base e Derivado<br /...
Contravariante em T<br />Covariante em T<br />typeof(Base).IsAssignableFrom(typeof(Derivado))<br />typeof(Base).IsAssignab...
Covariância e Contravariância<br />EmC# (.NET), osarrayssãocovariantes<br />string[] strings = GetStringArray();<br />Proc...
Covariância e Contravariância<br />Até agora, no C# (.NET), osgenéricostêmsidoinvariantes<br />List<string> strings = GetS...
Covariância Segura<br />out= covarianteapenasemposições de saída<br />publicinterfaceIEnumerable<T><br />{<br />IEnumerato...
Contravariância Segura<br />in= contravarianteapenasemposições de entrada<br />Podesertratadocomomaisderivado<br />publici...
Suportada apenas para interfaces genéricas e delegates genéricos.<br />Verificada/forçada estáticamente a partir da defini...
Variância em .NET 4.0<br />
Covariância E Contravariância Em Genéricos<br />http://paulomorgado.net/pt/blog/archive/2010/04/13/c-4-0-covari-226-ncia-e...
Argumentos com Nome e Opcionais<br />
Argumentos com Nome e Opcionais<br />Greeting("Mr.", "Morgado", 42);<br />Parâmetros<br />Argumentos<br />public void Gree...
Argumentos com Nome<br />int i = 0;<br />Method(i, third: i++, second: ++i);<br />int i = 0;<br />int CS$0$0000 = i++;<br ...
Argumentos Opcionais<br />int i = 0;<br />Method(i, third: ++i);<br />int i = 0;<br />int CS$0$0000 = ++i;<br />Method(i, ...
Classes de Argumentos<br />Argumentos Opcionais - Alternativa<br />XmlReaderSettings settings = newXmlReaderSettings();<br...
Argumentos Com Nome E Opcionais<br />http://paulomorgado.net/pt/blog/archive/2010/04/16/c-4-0-argumentos-com-nome-e-opcion...
Programação Dinâmica<br />
Dynamic Language Runtime<br />IronPython<br />IronRuby<br />C#<br />VB.NET<br />Others…<br />Dynamic Language Runtime<br /...
Objectos Tipados Dinâmicamente<br />Calculatorcalculator = GetCalculator();<br />int sum = calc.Add(10, 20);<br />object c...
Objectos Tipados Dinâmicamente<br />dynamicem tempo de compilação<br />System.Int32em tempo de execução<br />dynamic x = 1...
Em tempo de execução, ostiposreaissãosubstituídospordynamic
 O resultadoestático da operação é dynamic</li></li></ul><li>Objectos Tipados Dinâmicamente<br />public static class Math<...
IDynamicMetaObjectProvider<br />Representa um objecto dinâmico que pode ter operações determinadas em tempo de execução.<b...
Programação Dinâmica<br />http://paulomorgado.net/pt/blog/archive/2010/04/18/c-4-0-programa-231-227-o-din-226-mica.aspx<br...
Melhoramentos na Interoperabilidade com COM<br />
Argumentos com nome e opcionais<br />Omissão do Modificador ref<br />Importação Dinâmica<br />Mapeamento automático object...
Omissão do Modificador ref<br />objectfileName = "Test.docx";<br />object missing  = Missing.Value;<br />document.SaveAs(r...
Importação Dinâmica<br />((Excel.Range)(excel.Cells[1, 1])).Value2 = "Hello World!";<br />excel.Cells[1, 1] = "Hello World...
Equivalência de Tipos  e TiposEmbebidos (NO PIA)<br />
Melhoramentos Para Interoperabilidade Com COM<br />http://paulomorgado.net/pt/blog/archive/2010/04/19/c-4-0-melhoramentos-...
Demos<br />
Upcoming SlideShare
Loading in …5
×

As Novidades Do C# 4.0 - NetPonto

3,002 views

Published on

Published in: Technology
  • Be the first to comment

As Novidades Do C# 4.0 - NetPonto

  1. 1. As Novidades Do C#<br />
  2. 2. Paulo Morgado<br />
  3. 3. A Evolução ao C#<br />Covariância e Contravariância<br />Argumentos com Nome e Opcionais<br />Programação Dinâmica<br />Melhoramentos na Interoperabilidade com COM<br />Agenda<br />
  4. 4. A Evolução do C#<br />
  5. 5. A Evolução do C#<br />
  6. 6. Tendências<br />
  7. 7. Dinâmico vs. Estático<br />
  8. 8. VB<br /><ul><li>Argumentos com nome
  9. 9. Argumentos opcionais
  10. 10. Propriedades indexadas (COM)
  11. 11. Instrucções Lambda
  12. 12. Propriedades auto-implementadas
  13. 13. Inicializadores de colecções</li></ul>C#<br />C#<br />VB<br />Co-Evolução<br />
  14. 14. A Evolução do C#<br />
  15. 15. A evolução do C#<br />http://paulomorgado.net/pt/blog/archive/2010/04/12/a-evolu-231-227-o-do-c.aspx<br />Recursos<br />
  16. 16. Covariância e Contravariância<br />
  17. 17. Em álgebra multilinear, covariância e contravariância descrevem como a descrição quantitativa de certas entidades geométricas ou físicas variam quando passam de um sistema de coordenadas para outro.<br />Wikipedia<br />Covariância e Contravariância<br />
  18. 18. O tipo T é maior (>) que o tipo S se S é um subtipo (deriva) de T<br />Covariância e Contravariância<br />T≥S<br />typeof(T).IsAssignableFrom(typeof(S))<br />
  19. 19. Dados 2 tipos Base e Derivado, em que:<br />Existe uma conversão por referência (ou identidade) entre Base e Derivado<br />Base ≥ Derived<br />Uma definição de tipo genérico Genérico<T> é:<br />Covariante em T<br />Se Genérico<Base> ≥ Genérico<Derivado><br />Contravariante em T<br />Se Genérico<Base> ≤ Genérico<Derivado><br />Invariante em T<br />Se nenhuma das regras anteriores se aplica<br />Covariância e Contravariância<br />
  20. 20. Contravariante em T<br />Covariante em T<br />typeof(Base).IsAssignableFrom(typeof(Derivado))<br />typeof(Base).IsAssignableFrom(typeof(Derivado))<br />typeof(G<Derivado>).IsAssignableFrom(typeof(G<Base>))<br />typeof(G<Base>).IsAssignableFrom(typeof(G<Derivado>))<br />Covariância e Contravariância<br />
  21. 21. Covariância e Contravariância<br />EmC# (.NET), osarrayssãocovariantes<br />string[] strings = GetStringArray();<br />Process(strings);<br />…mas nãosãocovariantesseguros<br />void Process(object[] objects) { … }<br />void Process(object[] objects)<br />{<br /> objects[0] = "Hello"; // Ok<br /> objects[1] = newButton(); // Exception!<br />}<br />
  22. 22. Covariância e Contravariância<br />Até agora, no C# (.NET), osgenéricostêmsidoinvariantes<br />List<string> strings = GetStringList();<br />Process(strings);<br />O C# 4.0suporta<br />covariância e contravariânciasegura<br />void Process(IEnumerable<object> objects)<br />{<br />// IEnumerable<T> é apenas de leitura<br />// portanto é covarianteseguro<br />}<br />void Process(IEnumerable<object> objects) { … }<br />
  23. 23. Covariância Segura<br />out= covarianteapenasemposições de saída<br />publicinterfaceIEnumerable<T><br />{<br />IEnumerator<T> GetEnumerator();<br />}<br />publicinterfaceIEnumerable<out T><br />{<br />IEnumerator<T> GetEnumerator();<br />}<br />Podesertratadocomo<br />menosderivado<br />publicinterfaceIEnumerator<T><br />{<br /> T Current { get; }<br />boolMoveNext();<br />}<br />publicinterfaceIEnumerator<out T><br />{<br /> T Current { get; }<br />boolMoveNext();<br />}<br />IEnumerable<string> strings = GetStrings();<br />IEnumerable<object> objects = strings;<br />
  24. 24. Contravariância Segura<br />in= contravarianteapenasemposições de entrada<br />Podesertratadocomomaisderivado<br />publicinterfaceIComparer<T><br />{<br />int Compare(T x, T y);<br />}<br />publicinterfaceIComparer<in T><br />{<br />int Compare(T x, T y);<br />}<br />IComparer<object> objComp = GetComparer();<br />IComparer<string> strComp = objComp;<br />
  25. 25. Suportada apenas para interfaces genéricas e delegates genéricos.<br />Verificada/forçada estáticamente a partir da definição.<br />Tipos valor são sempre invariantes<br />Um IEnumerable<int> não é um IEnumerable<object><br />A regra para arrays é similar<br />Parâmetros ref e out necessitam tipos parâmetros invariantes<br />Variância em C# 4.0<br />
  26. 26. Variância em .NET 4.0<br />
  27. 27. Covariância E Contravariância Em Genéricos<br />http://paulomorgado.net/pt/blog/archive/2010/04/13/c-4-0-covari-226-ncia-e-contravari-226-ncia-em-gen-233-ricos.aspx<br />Covariância E Contravariância Em Genéricos – Simplificado<br />http://paulomorgado.net/pt/blog/archive/2010/04/15/c-4-0-covari-226-ncia-e-contravari-226-ncia-em-gen-233-ricos-simplificado.aspx<br />Covarince and Contravariance in Generics<br />http://msdn.microsoft.com/library/dd799517(VS.100).aspx<br />Exact rules for variance validity<br />http://blogs.msdn.com/ericlippert/archive/2009/12/03/exact-rules-for-variância-validity.aspx<br />Events get a little overhaul in C# 4, Afterward: Effective Events<br />http://blogs.msdn.com/cburrows/archive/2010/03/30/events-get-a-little-overhaul-in-c-4-afterward-effective-events.aspx<br />Recursos<br />
  28. 28. Argumentos com Nome e Opcionais<br />
  29. 29. Argumentos com Nome e Opcionais<br />Greeting("Mr.", "Morgado", 42);<br />Parâmetros<br />Argumentos<br />public void Greeting(string title, string name, intage)<br />Têmsemprenome<br />Nuncasãoopcionais<br />
  30. 30. Argumentos com Nome<br />int i = 0;<br />Method(i, third: i++, second: ++i);<br />int i = 0;<br />int CS$0$0000 = i++;<br />int CS$0$0001 = ++i;<br />Method(i, CS$0$0001, CS$0$0000); <br />public void Method(intfirst, intsecond, intthird)<br />
  31. 31. Argumentos Opcionais<br />int i = 0;<br />Method(i, third: ++i);<br />int i = 0;<br />int CS$0$0000 = ++i;<br />Method(i, 2, CS$0$0000); <br />public void Method(intfirst, intsecond = 5, intthird = 6) <br />public void Method(intfirst, intsecond = 2, intthird = 3) <br />public void Method(intfirst, intsecond) <br />Parecem sobreposições (overloads)<br />Mas nãosão!<br />public void Method(intfirst) <br />
  32. 32. Classes de Argumentos<br />Argumentos Opcionais - Alternativa<br />XmlReaderSettings settings = newXmlReaderSettings();<br />settings.ValidationType = ValidationType.Auto;<br />XmlReader.Create("file.xml", settings);<br />XmlReader.Create(<br />"file.xml",<br />new { ValidationType = ValidationType.Auto });<br />XmlReader.Create(<br />"file.xml",<br />newXmlReaderSettings { ValidationType = ValidationType.Auto });<br />Aindanão!<br />
  33. 33. Argumentos Com Nome E Opcionais<br />http://paulomorgado.net/pt/blog/archive/2010/04/16/c-4-0-argumentos-com-nome-e-opcionais.aspx<br />Alternativa Aos Argumentos Opcionais<br />http://paulomorgado.net/pt/blog/archive/2010/04/18/c-4-0-alternativa-aos-argumentos-opcionais.aspx<br />Named and Optional Arguments (C# Programming Guide)<br />http://msdn.microsoft.com/library/dd264739(VS.100).aspx<br />Recursos<br />
  34. 34. Programação Dinâmica<br />
  35. 35. Dynamic Language Runtime<br />IronPython<br />IronRuby<br />C#<br />VB.NET<br />Others…<br />Dynamic Language Runtime<br />Expression Trees<br />Dynamic Dispatch<br />Call Site Caching<br />PythonBinder<br />RubyBinder<br />COMBinder<br />JavaScriptBinder<br />ObjectBinder<br />
  36. 36. Objectos Tipados Dinâmicamente<br />Calculatorcalculator = GetCalculator();<br />int sum = calc.Add(10, 20);<br />object calculator = GetCalculator();<br />Type calculatorType = calculator.GetType();<br />object res = calculatorType.InvokeMember("Add",<br />BindingFlags.InvokeMethod, null,<br /> calculator, newobject[] { 10, 20 });<br />int sum = Convert.ToInt32(res);<br />ScriptObject calculator = GetCalculator();<br />object res = calculator.Invoke("Add", 10, 20);<br />int sum = Convert.ToInt32(res);<br />Estaticamente tipado paraserdinâmico<br />dynamic calc = GetCalculator();<br />int sum = calc.Add(10, 20);<br />Invocação de métododinâmica<br />Conversãodinâmica<br />
  37. 37. Objectos Tipados Dinâmicamente<br />dynamicem tempo de compilação<br />System.Int32em tempo de execução<br />dynamic x = 1;<br />dynamic y = "Hello";<br />dynamic z = newList<int> { 1, 2, 3 };<br />Quandoosoperandossãodynamic:<br /><ul><li> A selecção do membro é diferidapara tempo de execução
  38. 38. Em tempo de execução, ostiposreaissãosubstituídospordynamic
  39. 39. O resultadoestático da operação é dynamic</li></li></ul><li>Objectos Tipados Dinâmicamente<br />public static class Math<br />{<br /> publicstaticdecimal Abs(decimal value);<br /> publicstaticdouble Abs(double value);<br /> publicstaticfloat Abs(float value);<br /> publicstaticint Abs(int value);<br /> publicstaticlong Abs(long value);<br /> publicstaticsbyte Abs(sbyte value);<br /> publicstaticshort Abs(short value);<br /> ...<br />}<br />Métodoseleccionadoem tempo de compilação:double Abs(double x)<br />double x = 1.75;<br />double y = Math.Abs(x);<br />Métodoseleccionadoem tempo de execução:double Abs(double x)<br />dynamic x = 1.75;<br />dynamic y = Math.Abs(x);<br />Métodoseleccionadoem tempo de execução:int Abs(int x)<br />dynamic x = 2;<br />dynamic y = Math.Abs(x);<br />
  40. 40. IDynamicMetaObjectProvider<br />Representa um objecto dinâmico que pode ter operações determinadas em tempo de execução.<br />DynamicObject : IDynamicMetaObjectProvider<br />Permite definir o comportamento do objecto dinâmico quando se pretende executar uma operação.<br />ExpandoObject : IDynamicMetaObjectProvider<br />Objecto que permite que lhe sejam adicionados e removidos membros.<br />Construção de Objectos Dinâmicos<br />
  41. 41. Programação Dinâmica<br />http://paulomorgado.net/pt/blog/archive/2010/04/18/c-4-0-programa-231-227-o-din-226-mica.aspx<br />Proposta C#: Verificação Estática De Objectos Dinâmicos Em Tempo De Compilação<br />http://paulomorgado.net/pt/blog/archive/2010/03/17/proposta-c-verifica-231-227-o-est-225-tica-de-objectos-din-226-micos-em-tempo-de-compila-231-227-o.aspx<br />Using Type dynamic (C# Programming Guide)<br />http://msdn.microsoft.com/library/dd264736(VS.100).aspx<br />Dynamic Language Runtime Overview<br />http://msdn.microsoft.com/library/dd233052(v=VS.100).aspx<br />Recursos<br />
  42. 42. Melhoramentos na Interoperabilidade com COM<br />
  43. 43. Argumentos com nome e opcionais<br />Omissão do Modificador ref<br />Importação Dinâmica<br />Mapeamento automático object -> dynamic<br />Propriedades indexadas<br />Equivalência de Tipos e Tipos Embebidos (“NO PIA”)<br />Melhoramentos na Interoperabilidade com COM<br />
  44. 44. Omissão do Modificador ref<br />objectfileName = "Test.docx";<br />object missing = Missing.Value;<br />document.SaveAs(reffileName,<br />ref missing, ref missing, ref missing,<br />ref missing, ref missing, ref missing,<br />ref missing, ref missing, ref missing,<br />ref missing, ref missing, ref missing,<br />ref missing, ref missing, ref missing);<br />document.SaveAs("Test.docx",<br />Missing.Value, Missing.Value, Missing.Value,<br />Missing.Value, Missing.Value, Missing.Value,<br />Missing.Value, Missing.Value, Missing.Value,<br />Missing.Value, Missing.Value, Missing.Value,<br />Missing.Value, Missing.Value, Missing.Value);<br />document.SaveAs("Test.docx");<br />
  45. 45. Importação Dinâmica<br />((Excel.Range)(excel.Cells[1, 1])).Value2 = "Hello World!";<br />excel.Cells[1, 1] = "Hello World!"; <br />Excel.Range range = (Excel.Range)(excel.Cells[1, 1]); <br />Excel.Rangerange = excel.Cells[1, 1]; <br />
  46. 46. Equivalência de Tipos e TiposEmbebidos (NO PIA)<br />
  47. 47. Melhoramentos Para Interoperabilidade Com COM<br />http://paulomorgado.net/pt/blog/archive/2010/04/19/c-4-0-melhoramentos-para-interoperabilidade-com-com.aspx<br />Type Equivalence and Embedded InteropTypes<br />http://msdn.microsoft.com/library/dd997297.aspx<br />Recursos<br />
  48. 48. Demos<br />
  49. 49.
  50. 50. Conclusão<br />
  51. 51. A Evolução ao C#<br />Covariância e Contravariância<br />Argumentos com Nome e Opcionais<br />Programação Dinâmica<br />Melhoramentos na Interoperabilidade com COM<br />Conclusão<br />
  52. 52. Visual C# Developer Center<br />http://csharp.net/<br />Visual C# 2010 Samples<br />http://code.msdn.microsoft.com/cs2010samples<br />C# Language Specification 4.0<br />http://www.microsoft.com/downloads/details.aspx?familyid=DFBF523C-F98C-4804-AFBD-459E846B268E&displaylang=en<br />Recursos<br />
  53. 53. .NET Reflector<br />http://www.red-gate.com/products/reflector/<br />LINQPad<br />http://linqpad.net/<br />Paulo Morgado<br />http://PauloMorgado.NET/<br />Recursos<br />
  54. 54. Obrigado!<br />

×