Zunächst muss ich erklären, dass das Wort „syntaktischer Zucker“ keineswegs ein abfälliger Begriff ist. Es ist eine praktische Art zu schreiben, die es auch kann Verbessern Sie die Effizienz der Entwicklung und Codierung, sodass keine Verluste auftreten. Das macht Java-Entwickler neidisch, haha.
1. Vereinfachtes Eigentum
Zuvor haben wir die Immobilie so deklariert
view sourceprint?01 private string _myName;
02
03 öffentliche Zeichenfolge MyName
04
05 {
06
07 get { return _myName }
08
09 set { _myName = value;
10
11 }
Es macht wenig Sinn, eine solche Standardaussage zu machen, also haben die Designer von C# diese Standardarbeit dem Compiler überlassen, damit er sie für uns erledigt. Jetzt können wir sie so deklarieren
view sourceprint?1 public string MyName { get;
Natürlich geht dadurch die Flexibilität nicht verloren. Wir können beispielsweise Zugriffsbeschränkungen für get oder set separat festlegen
view sourceprint?1 public string MyName { get; protected internal set;
2. Schreibweise der Kommission nach zwei Änderungen
In .net 1.1 mussten wir die Methode deklarieren, bevor wir sie im Delegaten verwenden konnten. Nach .net 2.0 können wir anonyme Delegaten verwenden, was nicht nur das Schreiben vereinfacht, sondern Ihnen auch den späteren Zugriff auf Variablen innerhalb des Bereichs ermöglicht , Ram Jetzt, da Ausdrücke verfügbar sind, wird das Schreiben einfacher.
Quelle anzeigenprint?01 Klasse MyClass
02 {
03 öffentlicher Delegat void DoSomething(int a);
04
05 // Methodendelegation definieren
06 private 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 MyClass mc = new MyClass();
16 // Rufen Sie den definierten Methodendelegaten auf
17 mc.HowtoDo(new DoSomething(mc.DoIt), 10);
18 int x = 10;
19 //Anonyme Delegation verwenden
20 mc.HowtoDo(delegate(int a){
21 Console.WriteLine(a + x);
22},10);
dreiundzwanzig
24 //Lambda-Ausdruck verwenden
25 mc.HowtoDo(a=>Console.WriteLine(a+x),10);
26
27 Console.ReadLine();
28 }
29 }
3. Deklaration der Sammlungsklasse
Bevor wir eine Liste deklarierten und der Liste einen Anfangswert zuwiesen, mussten wir Folgendes schreiben:
view sourceprint?1 List<string> list = new List<string>();
2 list.Add("a一");
3 list.Add("b二");
4 list.Add("c三");
Jetzt nicht nötig, schreiben Sie es einfach
view sourceprint?1 List<string> list = new List<string> {
2 „def“, „OK“
3};
4. Operationen für jedes Element der Sammlungsklasse
Um die Elemente in der Sammlung einzeln zu verarbeiten, müssen wir wie folgt schreiben:
view sourceprint?1 foreach (String-Element in der Liste)
2 {
3 Console.WriteLine(item);
4}
Das ist jetzt nicht nötig, das ist in Ordnung
view sourceprint?1 list.ForEach(a => Console.WriteLine(a));
Der Code ist viel sauberer.
5. mit == versuchen Sie es endlich
Um Ressourcen freizugeben, wenn wir sie nicht mehr verwenden, verwenden wir oft using, was im Wesentlichen nur ein Syntax-Zucker für try fiannaly ist. Zum Beispiel
view sourceprint?1 StreamWriter sw = null;
2 Versuchen
3 {
4 sw = new StreamWriter("d:abc.txt");
5 sw.WriteLine("test");
6}
7 endlich {
8 if(sw!= null) sw.Dispose();
9}
Der obige Code kann wie folgt vereinfacht werden:
view sourceprint?1 using (var sw = new StreamWriter("d:abc.txt")) {
2 sw.WriteLine("test");
3}
6. süße var
Es ist nicht erforderlich, den deklarierten Typ für die Bedeutung von var zu schreiben. Sobald der Typ von var bestätigt wurde, kann er nur als lokaler Typ verwendet werden Variable und kann nicht als Feld verwendet werden.
Zum Beispiel:
view sourceprint?1 varwriter = new StreamWriter(path);
view sourceprint?1 for(var i=0;i<100;i++){}
7. Die Entwicklung der Fragezeichen
Das alte Fragezeichen + Doppelpunkt
Quelltext anzeigen?1 var b = 3;
2 var a = b > 9?b.ToString():“0“+b;
Neues Baby hat zwei Fragezeichen??, was bedeutet, dass, wenn die Variable links null ist, der Wert die Variable rechts ist, andernfalls der Wert der Variablen links.
view sourceprint?1 string a = null;
2 var b = a??"";
8. Syntaktischer Zucker zur Typinstanziierung
Quelle anzeigendrucken?1 öffentliche Klasse Abc
2 {
3 public int ID { get;
4
5 öffentliche Zeichenfolge Name { get;
6
7 öffentliche Zeichenfolge URL { get;
8}
Wir haben für die obige Klasse keinen Konstruktor deklariert, können ihn aber wie folgt instanziieren
view sourceprint?1 public static void Main(string[] args) {
2 var abc = neues Abc{
3ID=1,
4 Name="yukaizhao",
5 Url=" http://yukaizhao.cnblogs.com/ "
6};
7}
9. legendäre Erweiterungsmethoden
Erweiterungsmethoden wurden in C# 3.5 eingeführt. Wir können einer Klasse Instanzmethoden hinzufügen, ohne den Klassenquellcode zu ändern. Sein Wesen ist auch eine Umsetzung von syntaktischem Zucker.
Beispielsweise erweitern wir die String-Klasse um eine IsNumber-Methode:
view sourceprint?01 öffentliche statische Klasse StringExt {
02 static private Regex regexNumber = new Regex(" \d +");
03 static public bool IsNumber(diese Zeichenfolgeneingabe)
04 {
05 if (string.IsNullOrEmpty(input))
06 {
07 return false;
08 }
09 return regexNumber.IsMatch(input);
10}
11 }
Wir können diese Methode für die String-Instanz aufrufen
view sourceprint?1 var abc = „123“;
2 var isNumber = abs.IsNumber();
10. Verwenden Sie anonyme Klassen
Quelltext anzeigen?1 var a = new {
2 ID = 1,Name=“yukaizhao“,BlogUrl=“http://www.cnblogs.com/yukaizhao/“
3};
Anonyme Klassen sind nützlich, wenn Abfragedaten in Linq to SQL oder im Entity Framework zurückgegeben werden.
Wenn Sie mehr syntaktischen Zucker haben, teilen Sie ihn bitte mit. Gleichzeitig hoffe ich, dass jeder Spaß an Syntaxzucker hat, denn er kann uns Bequemlichkeit bringen, und es besteht kein Grund, darüber zu spotten.
http://www.cnblogs.com/yukaizhao/archive/2010/05/25/csharp-Syntactic-sugar.html