Em primeiro lugar, preciso declarar que a palavra "açúcar sintático" não é de forma alguma um termo depreciativo. Ela também pode me trazer comodidade. melhorar a eficiência do desenvolvimento e da codificação, em termos de desempenho. Não haverá perdas. Isso deixa os desenvolvedores Java com inveja, haha.
1. Propriedade Simplificada
Anteriormente, declaramos a propriedade assim
visualizar sourceprint?01 string privada _meuNome;
02
03 string pública MeuNome
04
05 {
06
07 obtenha { return _meuNome };
08
09 set { _meuNome = valor };
10
11}
Não faz muito sentido fazer uma declaração padronizada como essa, então os designers de C# entregaram esse trabalho padronizado ao compilador para fazer isso por nós.
visualizar sourceprint?1 public string MeuNome { get set }
Claro, isso não sacrificará a flexibilidade. Podemos definir restrições de acesso para obter ou definir separadamente, por exemplo.
visualizar sourceprint?1 public string MeuNome { get; conjunto interno protegido }
2. Método de redação da comissão após duas alterações
No .net 1.1, tivemos que declarar o método antes de usá-lo no delegado. Depois do .net 2.0, podemos usar delegados anônimos, o que não apenas simplifica a escrita, mas também permite acessar variáveis dentro do escopo em delegados anônimos posteriormente; , Ram Agora que as expressões estão disponíveis, escrever fica mais fácil.
ver fonteprint?01 classe MyClass
02 {
03 delegado público void DoSomething(int a);
04
05 //Definir delegação de método
06 privado void DoIt(int a) {
07 Console.WriteLine(a);
08}
09
10 private void HowtoDo(DoSomething doMethod,int a) {
11 doMethod(a);
12}
13
14 public static void Main(string[] args) {
15 MinhaClasse mc = new MinhaClasse();
16 //Chama o delegado do método definido
17 mc.HowtoDo(new DoSomething(mc.DoIt), 10);
18 int x = 10;
19 //Use delegação anônima
20 mc.Como fazer(delegate(int a){
21 Console.WriteLine(a + x);
22},10);
vinte e três
24 //Usar expressão lambda
25 mc.HowtoDo(a=>Console.WriteLine(a+x),10);
26
27 Console.ReadLine();
28}
29}
3. Declaração de classe de coleção
Antes de declararmos uma Lista e atribuirmos um valor inicial à lista, tivemos que escrever assim:
ver sourceprint?1 Lista<string> lista = new Lista<string>();
2 list.Add("a一");
3 list.Add("b二");
4 list.Add("c三");
Não há necessidade agora, apenas escreva
visualizar fonteprint?1 Lista<string> lista = new Lista<string> {
2 "def","OK"
3};
4. Operações em cada item da classe de coleção
Para processar os itens da coleção um por um, precisamos escrever assim:
visualizar sourceprint?1 foreach (item de string na lista)
2 {
3 Console.WriteLine(item);
4}
Não é necessário agora, tudo bem
visualizar sourceprint?1 list.ForEach(a => Console.WriteLine(a));
O código é muito mais limpo.
5. usando == tente finalmente
Para liberar recursos quando terminarmos de usá-los, geralmente usamos using é essencialmente apenas um açúcar de sintaxe para try fiannaly. Por exemplo
ver sourceprint?1 StreamWriter sw = null;
2 tentativas
3 {
4 sw = novo StreamWriter("d:abc.txt");
5 sw.WriteLine("teste");
6}
7 finalmente {
8 if(sw!= null) sw.Dispose();
9}
O código acima pode ser simplificado para:
visualizar sourceprint?1 usando (var sw = new StreamWriter("d:abc.txt")) {
2 sw.WriteLine("teste");
3}
6. bonito var
Não há necessidade de escrever o tipo declarado para o significado de var. O compilador determinará seu tipo com base na atribuição subsequente a var. Uma vez confirmado o tipo de var, ele só poderá ser usado como local. variável e não pode ser usado como um campo. Faça declarações de parâmetros.
Por exemplo:
visualizar sourceprint?1 var escritor = novo StreamWriter (caminho);
ver sourceprint?1 for(var i=0;i<100;i++){}
7. A evolução dos pontos de interrogação
O antigo ponto de interrogação + dois pontos
visualizar impressão de origem?1 var b = 3;
2 var a = b > 9?b.ToString():”0”+b;
O novo bebê tem dois pontos de interrogação??, o que significa que se a variável da esquerda for nula, o valor é a variável da direita, caso contrário é o valor da variável da esquerda.
visualizar sourceprint?1 string a = null;
2 var b = a??"";
8. Açúcar sintático para instanciação de tipo
ver sourceprint?1 classe pública Abc
2 {
3 ID interno público {obter definido;
4
5 string pública Nome {get;
6
7 URL de string pública {obter conjunto;
8}
Não declaramos um construtor para a classe acima, mas podemos instanciá-lo da seguinte forma
visualizar impressão de origem?1 public static void Main(string[] args) {
2 var abc = novo Abc{
3ID=1,
4 Nome = "yukaizhao",
5 Url=" http://yukaizhao.cnblogs.com/ "
6};
7}
9. métodos de extensão lendários
Os métodos de extensão foram introduzidos no C# 3.5. Podemos adicionar métodos de instância a uma classe sem modificar o código-fonte da classe. Sua essência também é uma implementação de açúcar sintático.
Por exemplo, estendemos a classe String com um método IsNumber:
visualizar sourceprint?01 classe estática pública StringExt {
02 Regex privado estático regexNumber = new Regex(" \d +");
03 static public bool IsNumber (esta entrada de string)
04 {
05 se (string.IsNullOrEmpty(entrada))
06 {
07 retorna falso;
08}
09 retorna regexNumber.IsMatch(entrada);
10}
11}
Podemos chamar esse método na instância String
visualizar impressão de origem?1 var abc = “123”;
2 var isNumber = abs.IsNumber();
10. Use classes anônimas
visualizar impressão de origem?1 var a = new {
2 ID = 1,Nome=”yukaizhao”,BlogUrl=”http://www.cnblogs.com/yukaizhao/”
3};
Classes anônimas são úteis ao retornar dados de consulta em linq para sql ou estrutura de entidade.
Se você tiver mais açúcar sintático, compartilhe. Ao mesmo tempo, espero que todos gostem do açúcar de sintaxe, porque ele pode nos trazer conveniência. Por favor, não zombe dele e não há necessidade de zombar dele.
http://www.cnblogs.com/yukaizhao/archive/2010/05/25/csharp-Syntactic-sugar.html