View
472
Download
1
Tags:
Embed Size (px)
DESCRIPTION
[Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)
Citation preview
Presentando .NET 4.0
Diego González
PabloZaidenvoren
Agenda
C# 4.0Dynamic Language RuntimeKeyword “dynamic”Co y Contra-VarianzaCode ContractsParametros opcionales
Base Class LibraryTask Parallel Library
Cambios en el IDE
Novedades en C# 4.0
Dynamic Language Runtime
Dinámico vs. Estático
Lenguajes Dinámicos
Simples
Tipos implícitos
Meta-programación
Sin compilación
Lenguajes Estáticos
Robustos
Rápidos
Herramientas inteligentes
Compilados
Common Language Runtime
Tipos estáticos
C#VB
RubyPython
Tipos dinámicos
Dynamic Language Runtime
Common Language Runtime
C#VB
RubyPython
Dynamic Language Runtime
Tipos estáticos
Tipos dinámicos
Dynamic Language Runtime
Keyword “dynamic”
Keyword dynamic
Permite utilizar a estructuras dinámicas desde C#.
Clase DynamicObject expone comportamiento dinámico.
Demo
Dynamic Language RuntimeUn puente para operar con
estructuras dinámicasReduce la complejidad de
programaciónFacilita la implementación de
lenguajes dinámicos
Demo DLR
Co-varianza y Contra-varianza segura
List<string> strings = GetStringList();Process(strings);
Co- and Contra-varianza
void Process(object[] objects) { … }
string[] strings = GetStringArray();Process(strings);
void Process(IEnumerable<object> objects) { … }
Los arrays en .NET son co-variantes
…pero no son co-variantes
seguros
Hasta ahora los generics en C# era
invariantesC# 4.0 soporta en
forma segura co- and contra-
varianza
void Process(object[] objects) { objects[0] = "Hello"; // Ok objects[1] = new Button(); // Exception!}
void Process(IEnumerable<object> objects) { // IEnumerable<T> is read-only and // therefore safely co-variant}
public interface IComparer<T>{ int Compare(T x, T y);}
public interface IComparer<in T>{ int Compare(T x, T y);}
public interface IEnumerator<T>{ T Current { get; } bool MoveNext();}
public interface IEnumerator<out T>{ T Current { get; } bool MoveNext();}
public interface IEnumerable<T>{ IEnumerator<T> GetEnumerator();}
public interface IEnumerable<out T>{ IEnumerator<T> GetEnumerator();}
Co- and Contra-varianza segura
out
IEnumerable<string> strings = GetStrings();IEnumerable<object> objects = strings;
IComparer<object> objComp = GetComparer();IComparer<string> strComp = objComp;
in
Code Contracts
Demo
Code Contracts
Pre-CondicionesPost-CondicionesInvariantes
Parámetros
Parámetros opcionales
public StreamReader OpenTextFile( string path, Encoding encoding, bool detectEncoding, int bufferSize);
public StreamReader OpenTextFile( string path, Encoding encoding, bool detectEncoding);
public StreamReader OpenTextFile( string path, Encoding encoding);
public StreamReader OpenTextFile( string path);
Método primario
Overloads secundarios
Llamada al primario con
valores default
public StreamReader OpenTextFile( string path, Encoding encoding, bool detectEncoding, int bufferSize);
public StreamReader OpenTextFile( string path, Encoding encoding = null, bool detectEncoding = true, int bufferSize = 1024);
Parámetros opcionales
Parametros opcionales
OpenTextFile("foo.txt", Encoding.UTF8);OpenTextFile("foo.txt", Encoding.UTF8, bufferSize: 4096);
Argumentos con nombre
OpenTextFile( bufferSize: 4096, path: "foo.txt", detectEncoding: false);
Los argumentos con nombre
deben ir al final
Los que no son opcionales se
deben especificar
Los argumentos se evaluan en el
orden que se escriben
Los argumentos con nombre pueden ir en
cualquier orden
Base Class Library
Task Parallel Library
Concurrencia
Parallel Pattern Library
Resource Manager
Task Scheduler
Task Parallel Library
PLINQ
Managed Library
Native Library
Key:
Threads
Operating System
Concurrency Runtime
Programming Models
Agents
Library
ThreadPool
Task Scheduler
Resource Manager
Data
Stru
cture
s
Data
Str
uct
ure
s
Integrated Tooling
Tools
ParallelDebugger
Toolwindows
Profiler Concurren
cyAnalysis
Programming Models
Concurrency Runtime
Messaging Blocks
Concurrencia
Task SchedulerCoordination Data StructuresTask Parallel LibraryParallel LINQ
Demo
Cambios en IDE
Cambios en IDE
Editor totalmente renovadoDiálogo “New Project” mejoradoZoom integrado“Add Reference” más rápidoSoporte para F#Herramientas para debug concurrente
Cambios IDE
Call Hierarchy navigationNavigate to symbolReference highlightErrores semánticos mejorados
Cambios IDE
Debug concurrenteDebug históricoAnálisis de dumps
Otras novedades
Side-by-side execution mejoradoLazy InitializationMás espacio en Isolated StorageGC corre en backgroundMemory Mapped FilesPIAs integradas en otras assemblies
¿Preguntas?