O que há de novo no C# 4.0 e no Visual Basic 10 Agnaldo Diogo dos Santos MCT, MCPD, 4 MCITP, 5 MCTS, MCSE, MCDBA, MCSD, MCP, SCJP 50minutos.com.br/blog agnaldo@50minutos.com.br @50minutos
Essência x Formalismo Simples, Conciso, Claro
Formalismo no C# 3.0 Removendo valores mágicos usando variáveis temporárias GenerateChart(20, true); var processcount = 20; var copytoword = true; GenerateChart(processCount, copytoword);
Formalismo no C# 3.0 Removendo valores mágicos usando variáveis temporárias GenerateChart(20, true); GenerateChart(20 /* processcount */, true /* copytoword */);
Formalismo no C# 3.0 Parâmetros opcionais usando sobrecarga de métodos void GenerateChart(int processcount) { GenerateChart(processCount, false); } void GenerateChart(int processcount, bool copytoword) { // Do Something }
Formalismo no C# 3.0 COM Interop e o sempre presente ref Missing.Value var word = new Word.Application(); word.documents.add(ref Missing.Value, ref Missing.Value, ref Missing.Value, ref Missing.Value);
Essência x Formalismo in C# 4.0
Formalismo no VB 9 backing fields explícitos para as propriedades Private m_name As String Public Property Name() As String Get Name = m_name End Get Set (ByVal value As String) m_name = value End End Property
Formalismo no VB 9 Popularidade das bibliotecas que usam expressões lambda causam problemas para desenvolvedores VB Sub MyMethod() LambdaCall(Function(i) TempMethod(i) End Function) End Sub Introduction of Function TempMethod(Dim param as Integer) As Nothing temporary Console.WriteLine(param) functions Return Nothing End Function Hacks since statement lambdas not supported
Formalismo no VB 9 O desenvolvedor deve indicar a continuidade da linha de comando SomeLongMethodCall(firstParam, _ secondparam, _ thirdparam, _ fourthparam, _ fifthparam)
Essência x Formalismo no VB 10
Por que Dynamic Language Runtime? Dynamically-Typed Python Ruby Statically-Typed C# VB Common Language Runtime
Por que Dynamic Language Runtime? Dynamically-Typed Python Ruby Statically-Typed C# VB Dynamic Language Runtime Common Language Runtime
Formalismo no C# 3.0 Interoperabilidade com Dynamic Language é problemática Calculator calc = GetCalculator(); int sum = calc.add(10, 20);
Formalismo no C# 3.0 Interoperabilidade com Dynamic Language é problemática object calc = GetCalculator(); Type calctype = calc.gettype(); object res = calctype.invokemember("add", BindingFlags.InvokeMethod, null, new object[] { 10, 20 }); int sum = Convert.ToInt32(res);
Formalismo no C# 3.0 Interoperabilidade com Dynamic Language é problemática ScriptObject calc = GetCalculator(); object res = calc.invoke("add", 10, 20); int sum = Convert.ToInt32(res);
Essência no C# 4.0 Interoperabilidade com Dynamic Languages Statically typed to be dynamic NÃO é problemática dynamic calc = GetCalculator(); int sum = calc.add(10, 20); Dynamic conversion Dynamic method invocation
O poder do late-binding
Novas features no C# 4.0 e VB 10 Feature VB10 C#4 Auto-implemented Properties Collection Initializers Statement Lambdas Implicit Line Continuation N/A Named/Optional Parameters Latebinding support (dynamic) Omit ref on COM calls New in Dev10 Already exists in VB9/C#3
Novas features no C# 4.0 e VB 10 Feature VB10 C#4 Auto-implemented Properties Collection Initializers Statement Lambdas Implicit Line Continuation N/A Named/Optional Parameters Latebinding support (dynamic) Omit ref on COM calls Interop with Dynamic Languages Co/contravariance PIA deployment not needed New in Dev10 Already exists in VB9/C#3
Novas features no C# 4.0 e VB 10 Feature VB10 C#4 Auto-implemented Properties Collection Initializers Statement Lambdas Implicit Line Continuation N/A Named/Optional Parameters Latebinding support (dynamic) Omit ref on COM calls Interop with Dynamic Languages Co/contravariance PIA deployment not needed Iterators XML Literals New in Dev10 Already exists in VB9/C#3
Fixando o Type System Covariance e Contravariance Parece complicado Mas não é!
Fixando o Type System Por que tipos genéricos dão pau atualmente? class Animal { } class Sheep : Animal { } void Speak(IEnumerable<Animal> animals) { // Do something with Animals Not Allowed: } var sheep = new List<Sheep>(); Speak(sheep); IEnumerable<Animal>!= IEnumerable<Sheep>
Resumindo Covariance pense out Contravariance pense in
Especificação das linguagens http://bit.ly/ah7rpb C# do 1.0 ao 4.0 e VB.NET 10
50minutos.com.br/blog agnaldo@50minutos.com.br @50minutos