As Novidades Do C# 4.0 - NetPonto
-
Upload
paulo-morgado -
Category
Technology
-
view
2.623 -
download
2
Transcript of As Novidades Do C# 4.0 - NetPonto
![Page 1: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/1.jpg)
As Novidades Do C#
![Page 2: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/2.jpg)
Paulo Morgado
![Page 3: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/3.jpg)
• A Evolução ao C#• Covariância e Contravariância• Argumentos com Nome e Opcionais• Programação Dinâmica• Melhoramentos na
Interoperabilidade com COM
Agenda
![Page 4: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/4.jpg)
A Evolução do C#
![Page 5: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/5.jpg)
C# 1.0Managed
C# 2.0Genericos
C# 3.0LINQ
A Evolução do C#
![Page 6: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/6.jpg)
Tendências
Declarativa
ConcorrenteDinâmica
![Page 7: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/7.jpg)
Dinâmico vs. Estático
Linguagens Dinâmicas
Simplicidade e concisão
Implicitamente tipadas
Meta-programação
Sem compilação
Linguagens Estáticas
Robustez
PerformanceFerramentas inteligentes
Melhor escalabilidade
![Page 8: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/8.jpg)
VB
C#C# VB
Co-Evolução• Argumentos
com nome• Argumentos
opcionais• Propriedades
indexadas (COM)
• Instrucções Lambda
• Propriedades auto-implementadas
• Inicializadores de colecções
![Page 9: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/9.jpg)
C# 1.0Managed
C# 2.0Genericos
C# 3.0LINQ
C# 4.0Programação Dinâmica
A Evolução do C#
![Page 10: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/10.jpg)
• A evolução do C#• http://paulomorgado.net/
pt/blog/archive/2010/04/12/a-evolu-231-227-o-do-c.aspx
Recursos
![Page 11: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/11.jpg)
Covariância e Contravariância
![Page 12: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/12.jpg)
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.
Wikipedia
Covariância e Contravariância
![Page 13: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/13.jpg)
O tipo T é maior (>) que o tipo S se S é um subtipo (deriva) de T
Covariância e Contravariância
T ≥ Stypeof(T).IsAssignableFrom(typeof(S))
![Page 14: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/14.jpg)
• Dados 2 tipos Base e Derivado, em que:• Existe uma conversão por referência (ou identidade) entre
Base e Derivado• Base ≥ Derived
• Uma definição de tipo genérico Genérico<T> é:• Covariante em T
• Se Genérico<Base> ≥ Genérico<Derivado>
• Contravariante em T• Se Genérico<Base> ≤ Genérico<Derivado>
• Invariante em T• Se nenhuma das regras anteriores se aplica
Covariância e Contravariância
![Page 15: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/15.jpg)
Contravariante em Ttypeof(Base).IsAssignableFrom(typeof(Derivado))
typeof(G<Derivado>).IsAssignableFrom(typeof(G<Base>))
Covariante em Ttypeof(Base).IsAssignableFrom(typeof(Derivado))
typeof(G<Base>).IsAssignableFrom(typeof(G<Derivado>))
Covariância e Contravariância
![Page 16: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/16.jpg)
Covariância e Contravariância
string[] strings = GetStringArray();Process(strings);
void Process(object[] objects){ objects[0] = "Hello"; // Ok objects[1] = new Button(); // Exception!}
Em C# (.NET), os arrays são covariantes
…mas não são covariantes seguros
void Process(object[] objects) { … }
![Page 17: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/17.jpg)
Covariância e Contravariância
List<string> strings = GetStringList();Process(strings);
Até agora, no C# (.NET), os genéricos têm
sido invariantes
void Process(IEnumerable<object> objects){ // IEnumerable<T> é apenas de leitura // portanto é covariante seguro}
O C# 4.0 suporta
covariância e contravariância
segura
void Process(IEnumerable<object> objects) { … }
![Page 18: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/18.jpg)
Covariância Segura
public interface IEnumerable<T>{ IEnumerator<T> GetEnumerator();}
public interface IEnumerator<T>{ T Current { get; } bool MoveNext();}
public interface IEnumerable<out T>{ IEnumerator<T> GetEnumerator();}public interface IEnumerator<out T>{ T Current { get; } bool MoveNext();}
out = covarianteapenas em posições de
saída
IEnumerable<string> strings = GetStrings();IEnumerable<object> objects = strings;
Pode ser tratado comomenos derivado
![Page 19: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/19.jpg)
Contravariância Segura
public interface IComparer<T>{ int Compare(T x, T y);}
public interface IComparer<in T>{ int Compare(T x, T y);} IComparer<object> objComp =
GetComparer();IComparer<string> strComp = objComp;
in = contravarianteapenas em posições de
entrada
Pode ser tratado como mais derivado
![Page 20: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/20.jpg)
• Suportada apenas para interfaces genéricas e delegates genéricos.
• Verificada/forçada estáticamente a partir da definição.• Tipos valor são sempre invariantes
• Um IEnumerable<int> não é um IEnumerable<object>• A regra para arrays é similar
• Parâmetros ref e out necessitam tipos parâmetros invariantes
Variância em C# 4.0
![Page 21: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/21.jpg)
Interfaces
• System.Collections.Generic.IEnumerable<out T>• System.Collections.Generic.IEnumerator<out T>• System.Linq.IQueryable<out T>• System.Collections.Generic.IComparer<in T>• System.Collections.Generic.IEqualityComparer<in T>• System.IComparable<in T>
Delegates
• System.Func<in T, …, out R>• System.Action<in T, …>• System.Predicate<in T>• System.Comparison<in T>• System.EventHandler<in T>
Variância em .NET 4.0
![Page 22: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/22.jpg)
• Covariância E Contravariância Em Genéricos• http://paulomorgado.net/pt/blog/archive/2010/04/13/c-4-0-covari-226-ncia-e-contravari-
226-ncia-em-gen-233-ricos.aspx
• Covariância E Contravariância Em Genéricos – Simplificado• 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
• Covarince and Contravariance in Generics• http://msdn.microsoft.com/library/dd799517(VS.100).aspx
• Exact rules for variance validity• http://blogs.msdn.com/ericlippert/archive/2009/12/03/exact-rules-for-variância-validity.aspx
• Events get a little overhaul in C# 4, Afterward: Effective Events• http://
blogs.msdn.com/cburrows/archive/2010/03/30/events-get-a-little-overhaul-in-c-4-afterward-effective-events.aspx
Recursos
![Page 23: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/23.jpg)
Argumentos com Nome e Opcionais
![Page 24: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/24.jpg)
Argumentos com Nome e Opcionais
Greeting("Mr.", "Morgado", 42);
public void Greeting(string title, string name, int age)
Argumentos
Parâmetros
Têm sempre nome
Nunca são opcionais
![Page 25: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/25.jpg)
Argumentos com Nome
int i = 0;Method(i, third: i++, second: ++i);
public void Method(int first, int second, int third)
int i = 0;int CS$0$0000 = i++;int CS$0$0001 = ++i;Method(i, CS$0$0001, CS$0$0000);
![Page 26: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/26.jpg)
Argumentos Opcionais
int i = 0;Method(i, third: ++i);
public void Method(int first, int second = 2, int third = 3) public void Method(int first, int second = 5, int third = 6)
public void Method(int first)
int i = 0;int CS$0$0000 = ++i;Method(i, 2, CS$0$0000);
public void Method(int first, int second)
Parecem sobreposições (overloads)
Mas não
são!
![Page 27: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/27.jpg)
• Classes de Argumentos
Argumentos Opcionais - Alternativa
XmlReaderSettings settings = new XmlReaderSettings();settings.ValidationType = ValidationType.Auto;XmlReader.Create("file.xml", settings);
XmlReader.Create( "file.xml", new XmlReaderSettings { ValidationType = ValidationType.Auto });
XmlReader.Create( "file.xml", new { ValidationType = ValidationType.Auto }); Ainda
não!
![Page 28: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/28.jpg)
• Argumentos Com Nome E Opcionais• http://paulomorgado.net/pt/blog/archive/2010/04/16/c-4-0-argumentos-com
-nome-e-opcionais.aspx
• Alternativa Aos Argumentos Opcionais• http://paulomorgado.net/pt/blog/archive/2010/04/18/c-4-0-alternativa-aos-a
rgumentos-opcionais.aspx
• Named and Optional Arguments (C# Programming Guide)• http://msdn.microsoft.com/library/dd264739(VS.100).aspx
Recursos
![Page 29: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/29.jpg)
Programação Dinâmica
![Page 30: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/30.jpg)
Dynamic Language Runtime
PythonBinder
RubyBinder
COMBinder
JavaScript
Binder
ObjectBinder
Dynamic Language RuntimeExpression Trees
Dynamic Dispatch
Call Site Caching
IronPython
IronRuby C# VB.NET Others…
![Page 31: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/31.jpg)
Objectos Tipados Dinâmicamente
Calculator calculator = GetCalculator();int sum = calc.Add(10, 20);object calculator = GetCalculator();
Type calculatorType = calculator.GetType();object res = calculatorType.InvokeMember("Add", BindingFlags.InvokeMethod, null, calculator, new object[] { 10, 20 });int sum = Convert.ToInt32(res);
ScriptObject calculator = GetCalculator();object res = calculator.Invoke("Add", 10, 20);int sum = Convert.ToInt32(res);
dynamic calc = GetCalculator();int sum = calc.Add(10, 20);
Estaticamente tipado para ser
dinâmico
Invocação de método
dinâmica
Conversão dinâmica
![Page 32: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/32.jpg)
Objectos Tipados Dinâmicamente
dynamic x = 1;dynamic y = "Hello";dynamic z = new List<int> { 1, 2, 3 };
dynamic em tempo de
compilação
System.Int32 em tempo de
execução
Quando os operandos são dynamic:• A selecção do membro é diferida para tempo de execução• Em tempo de execução, os tipos reais são substituídos por dynamic• O resultado estático da operação é dynamic
![Page 33: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/33.jpg)
Objectos Tipados Dinâmicamente
public static class Math{ public static decimal Abs(decimal value); public static double Abs(double value); public static float Abs(float value); public static int Abs(int value); public static long Abs(long value); public static sbyte Abs(sbyte value); public static short Abs(short value); ...}
double x = 1.75;double y = Math.Abs(x);
dynamic x = 1.75;dynamic y = Math.Abs(x);
Método seleccionado em tempo de compilação:
double Abs(double x)
Método seleccionado em
tempo de execução:double
Abs(double x)
dynamic x = 2;dynamic y = Math.Abs(x);
Método seleccionado em
tempo de execução:
int Abs(int x)
![Page 34: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/34.jpg)
• IDynamicMetaObjectProvider• Representa um objecto dinâmico que pode ter operações
determinadas em tempo de execução.
• DynamicObject : IDynamicMetaObjectProvider• Permite definir o comportamento do objecto dinâmico
quando se pretende executar uma operação.
• ExpandoObject : IDynamicMetaObjectProvider• Objecto que permite que lhe sejam adicionados e
removidos membros.
Construção de Objectos Dinâmicos
![Page 35: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/35.jpg)
• Programação Dinâmica• http://paulomorgado.net/pt/blog/archive/2010/04/18/c-4-0-programa-231-227-o-din-2
26-mica.aspx
• Proposta C#: Verificação Estática De Objectos Dinâmicos Em Tempo De Compilação• 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
• Using Type dynamic (C# Programming Guide)• http://msdn.microsoft.com/library/dd264736(VS.100).aspx
• Dynamic Language Runtime Overview• http://msdn.microsoft.com/library/dd233052(v=VS.100).aspx
Recursos
![Page 36: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/36.jpg)
Melhoramentos na Interoperabilidade com COM
![Page 37: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/37.jpg)
• Argumentos com nome e opcionais• Omissão do Modificador ref• Importação Dinâmica• Mapeamento automático object → dynamic• Propriedades indexadas
• Equivalência de Tipos e Tipos Embebidos (“NO PIA”)
Melhoramentos na Interoperabilidade com COM
![Page 38: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/38.jpg)
Omissão do Modificador ref
object fileName = "Test.docx";object missing = Missing.Value;
document.SaveAs(ref fileName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
document.SaveAs("Test.docx", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
document.SaveAs("Test.docx");
![Page 39: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/39.jpg)
Importação Dinâmica
((Excel.Range)(excel.Cells[1, 1])).Value2 = "Hello World!";
excel.Cells[1, 1] = "Hello World!";
Excel.Range range = (Excel.Range)(excel.Cells[1, 1]);
Excel.Range range = excel.Cells[1, 1];
![Page 40: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/40.jpg)
Equivalência de Tipos e Tipos Embebidos (NO PIA)
![Page 41: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/41.jpg)
• Melhoramentos Para Interoperabilidade Com COM• http://
paulomorgado.net/pt/blog/archive/2010/04/19/c-4-0-melhoramentos-para-interoperabilidade-com-com.aspx
• Type Equivalence and Embedded Interop Types• http://msdn.microsoft.com/library/dd997297.a
spx
Recursos
![Page 42: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/42.jpg)
Demos
![Page 43: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/43.jpg)
Q & A
![Page 44: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/44.jpg)
Conclusão
![Page 45: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/45.jpg)
• A Evolução ao C#• Covariância e Contravariância• Argumentos com Nome e Opcionais• Programação Dinâmica• Melhoramentos na
Interoperabilidade com COM
Conclusão
![Page 46: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/46.jpg)
• Visual C# Developer Center• http://csharp.net/
• Visual C# 2010 Samples• http://code.msdn.microsoft.com/cs2010samples
• C# Language Specification 4.0• http://www.microsoft.com/downloads/details.aspx?familyid=
DFBF523C-F98C-4804-AFBD-459E846B268E&displaylang=en
Recursos
![Page 47: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/47.jpg)
• .NET Reflector• http://www.red-gate.com/products/reflector/
• LINQPad• http://linqpad.net/
• Paulo Morgado• http://PauloMorgado.NET/
Recursos
![Page 48: As Novidades Do C# 4.0 - NetPonto](https://reader035.fdocument.pub/reader035/viewer/2022062319/555990d8d8b42a14638b4fc3/html5/thumbnails/48.jpg)
Obrigado!