1. dinâmicoExpandoObject
Amigos que estão familiarizados com js sabem que js pode ser escrito assim:
ver sourceprint?1 var t = new Object();
2 t.Abc = 'alguma coisa';
3t.Valor = 243;
Agora também podemos utilizar esse recurso da linguagem dinâmica js em c#, desde que uma variável seja declarada do tipo ExpandoObject. Por exemplo:
ver sourceprint?1 static void Main(string[] args)
2 {
3 dinâmico t = new ExpandoObject();
4 t.Abc = "abc";
5t.Valor = 10000;
6 Console.WriteLine("abc de t = {0}, valor de t = {1}", t.Abc, t.Value);
7 Console.ReadLine();
8}
Um novo namespace System.Dynamic foi adicionado no C# 4.0 para oferecer suporte a este aplicativo. Não tenho certeza de qual é o significado desse uso. É também uma tentativa de transição do C# para uma linguagem dinâmica.
2. Conversão automática genérica
Antes do C# 4.0, o código a seguir não podia ser compilado.
ver sourceprint?1 IEnumerable<object> objs = new List<string> {
2 "Tenho 0", "Tenho 1", "Tenho 2"
3};
No entanto, no C# 4.0, esse tipo de declaração é permitido, mas é limitado a interfaces genéricas. Métodos semelhantes para tipos genéricos não são permitidos.
visualizar sourceprint?1 Lista<objeto> objList = new Lista<string> {
2 "Sou 0", "Sou 1", "Sou 2"
3};
3. Os parâmetros opcionais dos parâmetros do método são os seguintes: a sintaxe da declaração do método
visualizar sourceprint?1 static void DoSomething(int notOptionalArg,string arg1 = "default Arg1", string arg2 = "default arg2") {
2 Console.WriteLine("arg1 = {0},arg2 = {1}",arg1,arg2);
3}
Este método possui três parâmetros. O primeiro é um parâmetro obrigatório, o segundo e o terceiro são parâmetros opcionais e todos possuem um valor padrão. Este formulário é útil para diversas sobrecargas de métodos com parâmetros fixos.
Chamado da seguinte forma:
ver sourceprint?1 static void Main(string[] args)
2 {
3 FaçaAlguma Coisa(1);
4 FaçaAlguma Coisa(1, "Cabaça");
5 DoSomething(1, "Cabaça", "Pepino");
6 Console.ReadLine();
7}
Talvez você pense, se eu tiver um método com a mesma assinatura de um método de parâmetro opcional sem selecionar um parâmetro, como o C# lidará com isso. Vamos dar uma olhada no código a seguir?
ver sourceprint?1 static void DoSomething(int notOpArg, string arg)
2 {
3 Console.WriteLine("arg1 = {0}", arg);
4}
Sobrecarreguei outro método DoSomething. Este método possui dois parâmetros, mas nenhum parâmetro opcional provou essa chamada.
Quando DoSomething(1,"arg"), métodos sem parâmetros opcionais serão executados primeiro.
4. Parâmetros nomeados de parâmetros de método Os parâmetros nomeados nos permitem atribuir valores de parâmetros especificando nomes de parâmetros ao chamar o método. Nesse caso, a ordem dos parâmetros pode ser ignorada. A seguinte declaração de método:
ver sourceprint?1 static void DoSomething(int height, int width, string openerName, string scroll) {
2 Console.WriteLine("altura = {0}, largura = {1}, openerName = {2}, rolagem = {3}", altura, largura, openerName, rolagem);
3}
Podemos chamar o método declarado acima assim
ver sourceprint?1 static void Main(string[] args)
2 {
3 DoSomething( scroll: "não", altura: 10, largura: 5, openerName: "nome da janela");
4 Console.ReadLine();
5}
Obviamente, isso é um açúcar sintático, mas faz sentido quando há muitos parâmetros de método e pode aumentar a legibilidade do código.
http://www.cnblogs.com/yukaizhao/archive/2010/05/24/csharp-40-dynamic-optional-argument.html