2008-11-15 8 views

Respuesta

2

Parece que la palabra clave dinámica puede cerrar la brecha entre lenguajes dinámicos como IronRuby o IronPython bastante bien, lo que probablemente ayudará a su adopción en el monocultivo de Microsoft ... eso me emociona.

Mientras estoy intrigado por ella, yo también estoy preocupado que va a ser usado en exceso, como los genéricos y LINQ, SQLCLR, etc :) suena

+1

También me preocupa el uso excesivo de la dinámica. Afortunadamente puedo agregar el estilo verificarlo en checkin – CVertex

+5

¿Genéricos sobreutilizados? Estoy de acuerdo con LINQ en que a veces se usa en exceso ... –

29

El material dinámico fresco si lo necesita pero no esperes usarlo muy a menudo.

La varianza genérica para los delegados e interfaces es similar - la falta de varianza es un dolor de cabeza en este momento, pero muchos de los lugares en los que es un dolor no será cubierto por la limitada variación disponible en C# 4.

Las características COM no me interesan particularmente, realmente debería tener más control sobre lo que son.

parámetros opcionales y con nombre podrían hacer una gran diferencia en la construcción de tipos inmutables: permite una sintaxis como:

Person p = new Person (name: "Jon", age: 32); 

sin tener combinaciones de mamut de sobrecargas del constructor. Preferiría un poco más de soporte para escribir tipos inmutables en forma de propiedades recién implementadas automáticamente, pero no espero que los obtengamos. (Desde luego, no están en la lista de características propuestos por el momento.)

Personalmente estoy realmente más interesado en un par de los marco características de .NET 4.0 - en particular code contracts y parallel extensions.

+3

Para agregar un ejemplo de esto, consulte: http://marcgravell.blogspot.com/2008/11/immutability-and-optional-parameters.html –

+1

Este video es informativo si tiene una hora para matar ... http://channel9.msdn.com/pdc2008/TL16/ – user10178

+3

Contratos de código + 1 –

17

Método valores por defecto de parámetros:

public void MyMethod1(string value1 = "test", int num1 = 10, double num2 = 12.2) 
{ 
    //... 
} 

tipos de retorno también quizá anónimos:

public var MyMethod2() 
{ 
    // .. 
} 
+1

Entonces, ¿los valores predeterminados de los parámetros significan que podemos llamarlos así? obj.MyMethod1 ("prueba", 1); ¿Funcionaría con su método proporcionado? – mxmissile

+1

Este fue el # 1 que me perdí cuando cambié de VB.NET a C#. – MiffTheFox

+1

funcionaría y las variables se verían así: value1 = "test", num1 = 1, num2 = 12.2 – Atmocreations

9

IDynamicObject, el pegamento detrás dynamic, permite la interpretación de una llamada en tiempo de ejecución.

Esto es interesante para escenarios intrínsecamente sin tipo, como REST, XML, COM, DataSet, lenguajes dinámicos y muchos otros. Es una implementación de dynamic dispatch construida en la parte superior de Dynamic Language Runtime (DLR).

En lugar de la semántica de reflexión engorroso, punto en variables declaró como dynamic. Imagine trabajar con objetos de Javascript de Silverlight:

dynamic obj = GetScriptObject(); 

HtmlPage.Window.Alert(obj.someProperty); 

Todo sintaxis de C# es compatible (creo):

HtmlPage.Window.Alert(obj.someMethod() + obj.items[0]); 

reflexión en sí parece mucho más limpio:

public void WriteSomePropertyValue(object target) 
{ 
    Console.WriteLine((target as dynamic).SomeProperty); 
} 

public void WriteSomeMethodValue(object target, int arg1, string arg2) 
{ 
    Console.WriteLine((target as dynamic).SomeMethod(arg1, arg2)); 
} 

dynamic es otra herramienta en el kit de herramientas. No cambia el estático vs.debate dinámico, simplemente alivia la fricción.

+4

Holy crap .... No había pensado en lanzar objetos a la dinámica. ¡Eso hace que la reflexión sea más fácil! – Will

9
+0

No sé si los llamaría geniales. Mis compañeros de trabajo los maltratan tanto que desearía que los quitaran. –

+1

@AndrewHoffman algo significativamente útil tiene el poder de ser abusado –

3

No es estrictamente C#, pero desde .NET está marcado aquí hay un buen enlace con respecto BCL changes.

Nota a la libre: debe cambiar el nombre de mi método de extensión antes de Stopwatch.Restart() 4.0 se libera :)

3
  • C# 2.0 -Generics (se añadió soporte .NET Framework, y C# se benefició de esto); patrón iterador (la palabra clave yield); métodos anónimos (la palabra clave del delegado), tipos anulables y el operador coalescente nulo (??).
  • C# 3.0 tipos -Anónimo, métodos de extensión, inicializadores de objeto, inicializadores de colección, las variables locales implícitamente mecanografiadas (palabra clave var), expresiones lambda (=>), y el patrón de expresión de consulta LINQ.
  • C# 4.0 Parámetros -Opcional y argumentos con nombre, tipado dinámico (tipo dinámico), la mejora de COM-Interop, y la Contra y covarianza.
2

C# 4,0

1) PLINQ

2) con nombre y parámetros opcionales

3) Lazy

4) Co & Contra Varianza

5) Tarea Paralelo

6) de objetos dinámicos objetos

7) Expando

8) Mejora de la COM-Interop

9) Tupla

sólo para nombrar unos pocos Capacidad

0

escribir código asíncrono en modo síncrono con async y aguarde es genial.

Cuestiones relacionadas