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

Documentos relacionados