1. objetoexpandodinámico
Los amigos que están familiarizados con js saben que js se puede escribir así:
ver fuenteprint?1 var t = nuevo objeto();
2 t.Abc = 'algo';
3t.Valor = 243;
Ahora también podemos usar esta característica del lenguaje dinámico js en c#, siempre que una variable esté declarada como tipo ExpandoObject. Por ejemplo:
ver fuenteprint?1 static void Main(cadena[] args)
2 {
3 dinámica t = nuevo ExpandoObject();
4 t.Abc = "abc";
5t.Valor = 10000;
6 Console.WriteLine("abc de t = {0}, valor de t = {1}", t.Abc, t.Value);
7 Consola.ReadLine();
8}
Se agregó un nuevo espacio de nombres System.Dynamic en C# 4.0 para admitir esta aplicación. No estoy seguro de cuál es el significado de este uso. También es una prueba de la transición de C# a un lenguaje dinámico.
2. Conversión automática genérica
Antes de C# 4.0, no se podía compilar el siguiente código.
ver fuenteprint?1 IEnumerable<objeto> objs = nueva Lista<cadena> {
2 "Soy 0","Soy 1","Soy 2"
3};
Sin embargo, en C# 4.0, este tipo de declaración está permitida, pero está limitada a interfaces genéricas. No se permiten métodos similares para tipos genéricos. El siguiente código tiene un error de compilación.
ver fuenteprint?1 Lista<objeto> objList = nueva Lista<cadena> {
2 "Soy 0","Soy 1","Soy 2"
3};
3. Los parámetros opcionales de los parámetros del método son los siguientes: la sintaxis de la declaración del método
ver código fuenteprint?1 static void DoSomething(int notOptionalArg,string arg1 = "arg1 predeterminado", string arg2 = "arg2 predeterminado") {
2 Console.WriteLine("arg1 = {0},arg2 = {1}",arg1,arg2);
3}
Este método tiene tres parámetros: el primero es un parámetro obligatorio, el segundo y el tercero son parámetros opcionales y todos tienen un valor predeterminado. Este formulario es útil para varias sobrecargas de métodos con parámetros fijos.
Llamado de la siguiente manera:
ver fuenteprint?1 static void Main(cadena[] args)
2 {
3 Hacer algo (1);
4 Hacer algo(1, "Calabaza");
5 Hacer algo(1, "Calabaza", "Pepino");
6 Consola.ReadLine();
7}
Quizás pienses, si tengo un método con la misma firma que un método de parámetro opcional sin seleccionar un parámetro, ¿cómo lo manejará C#? Echemos un vistazo al siguiente código.
ver código fuente? 1 vacío estático Hacer algo (int notOpArg, string arg)
2 {
3 Console.WriteLine("arg1 = {0}", arg);
4}
Sobrecargué otro método DoSomething. Este método tiene dos parámetros, pero ningún parámetro opcional ha demostrado que la llamada.
Cuando DoSomething(1,"arg"), los métodos sin parámetros opcionales se ejecutarán primero.
4. Parámetros con nombre de parámetros del método Los parámetros con nombre nos permiten asignar valores de parámetros especificando los nombres de los parámetros al llamar al método. En este caso, se puede ignorar el orden de los parámetros. La siguiente declaración de método:
ver código fuenteprint?1 static void Hacer algo (int alto, int ancho, cadena openerName, cadena de desplazamiento) {
2 Console.WriteLine ("alto = {0}, ancho = {1}, nombre del abridor = {2}, desplazamiento = {3}", alto, ancho, nombre del abridor, desplazamiento);
3}
Podemos llamar al método declarado arriba así
ver fuenteprint?1 static void Main(cadena[] argumentos)
2 {
3 Hacer algo (desplazamiento: "no", alto: 10, ancho: 5, nombre del abridor: "nombre de la ventana");
4 Consola.ReadLine();
5}
Obviamente esto es azúcar sintáctico, pero tiene sentido cuando hay muchos parámetros de método y puede aumentar la legibilidad del código.
http://www.cnblogs.com/yukaizhao/archive/2010/05/24/csharp-40-dynamic-optional-argument.html