En primer lugar, debo declarar que la palabra "azúcar sintáctico" no es de ninguna manera un término despectivo. Puede resultarme conveniente. También puede ayudarnos a realizar la conversión. mejorar la eficiencia del desarrollo y la codificación, en términos de rendimiento No habrá pérdida. Esto hace que los desarrolladores de Java sientan envidia, jaja.
1. Propiedad simplificada
Anteriormente declaramos la Propiedad así
ver sourceprint?01 cadena privada _myName;
02
03 cadena pública MiNombre
04
05 {
06
07 obtener { return _myName }
08
09 establecer { _miNombre = valor }
10
11 }
No tiene mucho sentido hacer una declaración sencilla como esta, por lo que los diseñadores de C# entregaron este trabajo sencillo al compilador para que lo haga por nosotros. Ahora podemos declararlo así.
ver fuenteprint?1 cadena pública MiNombre { get;
Por supuesto, no sacrificará la flexibilidad. Podemos establecer restricciones de acceso para obtener o configurar por separado, por ejemplo.
ver sourceprint?1 cadena pública MiNombre { get; conjunto interno protegido }
2. Método de redacción de la comisión después de dos cambios
En .net 1.1, teníamos que declarar el método antes de usarlo en el delegado. Después de .net 2.0, podemos usar delegados anónimos, lo que no solo simplifica la escritura, sino que también permite acceder a variables dentro del alcance en delegados anónimos; , Ram Ahora que las expresiones están disponibles, escribir se vuelve más fácil.
ver código fuenteprint?01 clase MiClase
02 {
03 delegado público nulo Hacer algo (int a);
04
05 //Definir delegación de método
06 vacío privado DoIt (int a) {
07 Consola.WriteLine(a);
08 }
09
10 Cómo hacer vacío privado (DoSomething doMethod, int a) {
11 hacerMétodo(a);
12}
13
14 público estático vacío Principal (cadena [] args) {
15 MiClase mc = nueva MiClase();
16 //Llamar al delegado del método definido
17 mc.Howto(nuevo HacerAlgo(mc.DoIt), 10);
18intx = 10;
19 //Usar delegación anónima
20 mc.HowtoDo(delegado(int a){
21 Consola.WriteLine(a + x);
22},10);
veintitrés
24 //Usar expresión lambda
25 mc.HowtoDo(a=>Console.WriteLine(a+x),10);
26
27 Consola.ReadLine();
28 }
29 }
3. Declaración de clase de colección
Antes de declarar una Lista y asignarle un valor inicial, teníamos que escribir así:
ver código fuenteprint?1 Lista<cadena> lista = nueva Lista<cadena>();
2 lista.Add("a一");
3 lista.Add("b二");
4 list.Add("c三");
No es necesario ahora, solo escríbelo.
ver código fuenteprint?1 Lista<cadena> lista = nueva Lista<cadena> {
2 "definitivamente", "OK"
3};
4. Operaciones sobre cada elemento de la clase de colección.
Para procesar los elementos de la colección uno por uno, debemos escribir así:
ver sourceprint?1 foreach (elemento de cadena en la lista)
2 {
3 Consola.WriteLine(elemento);
4}
No es necesario ahora, está bien.
ver fuenteprint?1 list.ForEach(a => Console.WriteLine(a));
El código es mucho más limpio.
5. usando == intenta finalmente
Para liberar recursos cuando terminemos de usarlos, a menudo usamos usando. Usar es esencialmente solo un azúcar de sintaxis para probar fiannaly. Por ejemplo
ver código fuenteprint?1 StreamWriter sw = null;
2 intento
3 {
4 sw = nuevo StreamWriter("d:abc.txt");
5 sw.WriteLine("prueba");
6}
7 finalmente {
8 si(sw!= nulo) sw.Dispose();
9}
El código anterior se puede simplificar a:
ver sourceprint?1 usando (var sw = new StreamWriter("d:abc.txt")) {
2 sw.WriteLine("prueba");
3}
6. linda var
No es necesario escribir el tipo declarado para el significado de var. El compilador determinará su tipo en función de la asignación posterior a var. Una vez que se confirma el tipo de var, no se puede cambiar. variable y no se puede utilizar como campo. Realizar declaraciones de parámetros.
Por ejemplo:
ver código fuente?1 var escritor = nuevo StreamWriter(ruta);
ver fuenteprint?1 for(var i=0;i<100;i++){}
7. La evolución de los signos de interrogación
El viejo signo de interrogación + dos puntos
ver fuenteprint?1 var b = 3;
2 var a = b > 9?b.ToString():”0”+b;
New baby tiene dos signos de interrogación??, lo que significa que si la variable de la izquierda es nula, el valor es la variable de la derecha, en caso contrario es el valor de la variable de la izquierda.
ver fuenteprint?1 cadena a = nulo;
2 var b = a??"";
8. Azúcar sintáctico para creación de instancias de tipo
ver fuenteprint?1 clase pública Abc
2 {
3 ID int pública {obtener; establecer}
4
5 nombre de cadena pública {obtener; establecer}
6
7 URL de cadena pública {obtener;
8}
No declaramos un constructor para la clase anterior, pero podemos crear una instancia de la siguiente manera
ver fuenteprint?1 public static void Main(string[] args) {
2 var abc = nuevo Abc{
3ID=1,
4 Nombre = "yukaizhao",
5 URL=" http://yukaizhao.cnblogs.com/ "
6};
7}
9. métodos de extensión legendarios
Los métodos de extensión se introdujeron en C# 3.5. Podemos agregar métodos de instancia a una clase sin modificar el código fuente de la clase. Su esencia es también una implementación del azúcar sintáctico.
Por ejemplo, ampliamos la clase String con un método IsNumber:
ver sourceprint?01 clase estática pública StringExt {
02 Regex privado estático regexNumber = new Regex(" \d +");
03 bool público estático IsNumber (esta entrada de cadena)
04 {
05 si (cadena.IsNullOrEmpty(entrada))
06 {
07 devuelve falso;
08 }
09 devolver regexNumber.IsMatch(entrada);
10}
11 }
Podemos llamar a este método en la instancia de String.
ver fuenteprint?1 var abc = “123”;
2 var esNúmero = abs.EsNúmero();
10. Usa clases anónimas
ver fuenteprint?1 var a = nuevo {
2 ID = 1,Nombre=”yukaizhao”,BlogUrl=”http://www.cnblogs.com/yukaizhao/”
3};
Las clases anónimas son útiles cuando se devuelven datos de consulta en linq a sql o al marco de entidad.
Si tienes más azúcar sintáctico, compártelo. Al mismo tiempo, espero que todos disfruten del azúcar sintáctico, porque puede brindarnos comodidad. Por favor, no se burlen de él y no hay necesidad de burlarse de él.
http://www.cnblogs.com/yukaizhao/archive/2010/05/25/csharp-Syntactic-sugar.html