O que há de novo no C# 4 e no Visual Basic 10 (1,08
Transcrição
O que há de novo no C# 4 e no Visual Basic 10 (1,08
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 [email protected] @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 End Sub Function) 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 Statically-Typed C# VB Common Language Runtime Ruby 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 NÃO é problemática Statically typed to be dynamic 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) { Not Allowed: // Do something with Animals IEnumerable<Animal> } != IEnumerable<Sheep> var sheep = new List<Sheep>(); Speak(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 [email protected] @50minutos