Tout d'abord, je dois déclarer que le mot « sucre syntaxique » n'est en aucun cas un terme péjoratif. Il peut m'apporter de la commodité. C'est une manière pratique d'écrire. Le compilateur peut également nous aider à effectuer la conversion. améliorer l'efficacité du développement et du codage, en termes de performances, il n'y aura aucune perte. Cela rend les développeurs Java envieux, haha.
1. Propriété simplifiée
Plus tôt, nous avons déclaré la propriété comme ceci
afficher sourceprint?01 chaîne privée _myName ;
02
03 chaîne publique MonNom
04
05 {
06
07 obtenir { return _myName }
08
09 set { _myName = valeur }
10
11 }
Cela n'a pas beaucoup de sens de faire une déclaration à l'emporte-pièce comme celle-ci, c'est pourquoi les concepteurs de C# ont confié ce travail à l'emporte-pièce au compilateur pour qu'il le fasse à notre place.
afficher sourceprint?1 chaîne publique MonNom { get }
Bien sûr, cela ne sacrifiera pas la flexibilité. Nous pouvons définir des restrictions d'accès pour get ou set séparément, par exemple.
afficher sourceprint?1 chaîne publique MonNom { get ; ensemble interne protégé } ;
2. Méthode de rédaction des commissions après deux changements
Dans .net 1.1, nous avons dû déclarer la méthode avant de l'utiliser dans le délégué. Après .net 2.0, nous pouvons utiliser des délégués anonymes, ce qui simplifie non seulement l'écriture, mais vous permet également d'accéder ultérieurement aux variables de la portée dans les délégués anonymes ; , Ram Maintenant que les expressions sont disponibles, l'écriture devient plus facile.
voir sourceprint?01 classe MaClasse
02 {
03 délégué public void DoSomething(int a);
04
05 //Définir la délégation de méthode
06 privé 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[] arguments) {
15 MaClasse mc = new MaClasse();
16 //Appeler le délégué de méthode défini
17 mc.HowtoDo (nouveau DoSomething (mc.DoIt), 10);
18 entier x = 10 ;
19 //Utiliser la délégation anonyme
20 mc.HowtoDo(délégué(int a){
21 Console.WriteLine(a + x);
22},10);
vingt-trois
24 //Utiliser l'expression lambda
25 mc.HowtoDo(a=>Console.WriteLine(a+x),10);
26
27 Console.ReadLine();
28 }
29 }
3. Déclaration de classe de collection
Avant de déclarer une liste et d'attribuer une valeur initiale à la liste, nous devions écrire comme ceci :
afficher sourceprint?1 List
2 list.Add("a一");
3 list.Add("b二");
4 list.Add("c");
Pas besoin maintenant, écris-le simplement
afficher sourceprint?1 List
2 "déf", "OK"
3} ;
4. Opérations sur chaque élément de la classe de collection
Afin de traiter les éléments de la collection un par un, nous devons écrire ainsi :
afficher sourceprint?1 foreach (élément de chaîne dans la liste)
2 {
3 Console.WriteLine(élément);
4}
Ce n'est pas nécessaire maintenant, c'est bien
afficher sourceprint?1 list.ForEach(a => Console.WriteLine(a));
Le code est beaucoup plus propre.
5. en utilisant == essayez enfin
Afin de libérer des ressources une fois que nous avons fini de les utiliser, nous utilisons souvent using est essentiellement juste un sucre de syntaxe pour essayer fiannaly. Par exemple
afficher sourceprint?1 StreamWriter sw = null;
2 essais
3 {
4 sw = new StreamWriter("d:abc.txt");
5 sw.WriteLine("test");
6}
7 enfin {
8 if(sw!= null) sw.Dispose();
9}
Le code ci-dessus peut être simplifié en :
afficher sourceprint?1 en utilisant (var sw = new StreamWriter("d:abc.txt")) {
2 sw.WriteLine("test");
3}
6. mignon var
Il n'est pas nécessaire d'écrire le type déclaré pour la signification de var. Le compilateur déterminera son type en fonction de l'affectation ultérieure à var. Une fois le type de var confirmé, il ne peut pas être modifié. variable et ne peut pas être utilisé comme champ. Effectuez des déclarations de paramètres.
Par exemple:
afficher sourceprint?1 varwriter = new StreamWriter(path);
afficher sourceprint?1 pour (var i=0;i<100;i++){}
7. L’évolution des points d’interrogation
Le vieux point d'interrogation + deux points
voir sourceprint?1 var b = 3;
2 var a = b > 9?b.ToString():”0”+b;
New baby a deux points d'interrogation ??, ce qui signifie que si la variable de gauche est nulle, la valeur est la variable de droite, sinon c'est la valeur de la variable de gauche.
afficher sourceprint?1 chaîne a = null ;
2 var b = a??"";
8. Sucre syntaxique pour l'instanciation de type
voir sourceprint?1 classe publique Abc
2 {
3 ID public int { get ; set }
4
5 chaîne publique Nom { get ; set ;
6
7 chaîne publique Url { get ; set ;
8}
Nous n'avons pas déclaré de constructeur pour la classe ci-dessus, mais nous pouvons l'instancier comme suit
voir sourceprint?1 public static void Main(string[] args) {
2 var abc = nouveau Abc{
3ID=1,
4 Nom = "yukaizhao",
5 Url=" http://yukaizhao.cnblogs.com/ "
6} ;
7}
9. méthodes d'extension légendaires
Les méthodes d'extension ont été introduites dans C# 3.5. Nous pouvons ajouter des méthodes d'instance à une classe sans modifier le code source de la classe. Son essence est aussi une implémentation du sucre syntaxique.
Par exemple, nous étendons la classe String avec une méthode IsNumber :
afficher sourceprint?01 classe statique publique StringExt {
02 Regex privée statique regexNumber = new Regex(" \d +");
03 bool public statique IsNumber (cette chaîne d'entrée)
04 {
05 si (string.IsNullOrEmpty(input))
06 {
07 renvoie faux ;
08 }
09 return regexNumber.IsMatch(input);
10}
11 }
Nous pouvons appeler cette méthode sur l'instance String
afficher sourceprint?1 var abc = « 123 » ;
2 var isNumber = abs.IsNumber();
10. Utiliser des cours anonymes
afficher sourceprint?1 var a = nouveau {
2 ID = 1,Nom=”yukaizhao”,BlogUrl=”http://www.cnblogs.com/yukaizhao/”
3} ;
Les classes anonymes sont utiles lors du renvoi de données de requête dans Linq to SQL ou Entity Framework.
Si vous avez plus de sucre syntaxique, partagez-le. En même temps, j'espère que tout le monde appréciera le sucre syntaxique, car il peut nous apporter du confort. S'il vous plaît, ne vous en moquez pas, et il n'est pas nécessaire de s'en moquer.
http://www.cnblogs.com/yukaizhao/archive/2010/05/25/csharp-Syntactic-sugar.html