ก่อนอื่น ฉันต้องประกาศว่าคำว่า "syntactic sugar" ไม่ใช่คำที่เสื่อมเสียแต่อย่างใด มันเป็นวิธีที่สะดวกในการเขียน คอมไพเลอร์จะช่วยเราในการแปลงด้วยเช่นกัน ปรับปรุงประสิทธิภาพของการพัฒนาและการเขียนโค้ดในแง่ของประสิทธิภาพจะไม่เกิดการสูญเสีย ทำให้ Java Developer อิจฉากันเลยทีเดียว 555
1. คุณสมบัติแบบย่อ
ก่อนหน้านี้เราได้ประกาศคุณสมบัติเช่นนี้
ดู sourceprint?01 สตริงส่วนตัว _myName;
02
03 สตริงสาธารณะ MyName
04
05 {
06
07 รับ { กลับ _myName }
08
09 ตั้ง { _myName = ค่า;
10
11 }
มันไม่สมเหตุสมผลเลยที่จะสร้างคำสั่งตัดคุกกี้เช่นนี้ ดังนั้นนักออกแบบของ C# จึงมอบงานตัดคุกกี้นี้ให้กับคอมไพเลอร์เพื่อทำแทนเรา ตอนนี้เราสามารถประกาศสิ่งนี้ได้
ดู sourceprint? 1 สตริงสาธารณะ MyName { รับ;
แน่นอนว่าจะไม่ทำให้ความยืดหยุ่นลดลง เช่น เราสามารถกำหนดข้อจำกัดการเข้าถึงเพื่อรับหรือตั้งค่าแยกกันได้
ดู sourceprint? 1 สตริงสาธารณะ MyName { รับ; ชุดภายในที่ได้รับการป้องกัน;
2. วิธีการเขียนค่าคอมมิชชันหลังจากการเปลี่ยนแปลงสองครั้ง
ใน .net 1.1 เราต้องประกาศวิธีการก่อนที่จะใช้ในผู้รับมอบสิทธิ์ หลังจาก .net 2.0 เราสามารถใช้ผู้รับมอบสิทธิ์ที่ไม่เปิดเผยตัวตน ซึ่งไม่เพียงแต่ทำให้การเขียนง่ายขึ้น แต่ยังช่วยให้คุณเข้าถึงตัวแปรภายในขอบเขตในผู้รับมอบสิทธิ์ที่ไม่ระบุตัวตนได้ในภายหลัง , Ram ตอนนี้มีสำนวนแล้ว การเขียนก็ง่ายขึ้น
ดู sourceprint?01 คลาส MyClass
02 {
03 ผู้แทนสาธารณะถือเป็นโมฆะ DoSomething (int a);
04
05 //กำหนดวิธีการมอบหมาย
06 โมฆะส่วนตัว DoIt (int a) {
07 Console.WriteLine (ก);
08 }
09
10 โมฆะส่วนตัว HowtoDo (ทำอะไรบางอย่าง doMethod, int a) {
11 วิธีทำ(ก);
12}
13
14 โมฆะสาธารณะคงหลัก (สตริง [] args) {
15 MyClass mc = ใหม่ MyClass();
16 //เรียกผู้รับมอบสิทธิ์วิธีการที่กำหนดไว้
17 mc.HowtoDo(ทำอะไรบางอย่างใหม่(mc.DoIt), 10);
18 นิ้ว x = 10;
19 //ใช้การมอบหมายที่ไม่ระบุชื่อ
20 mc.HowtoDo(ผู้รับมอบสิทธิ์(int a){
21 Console.WriteLine (a + x);
22},10);
ยี่สิบสาม
24 //ใช้นิพจน์แลมบ์ดา
25 mc.HowtoDo(a=>Console.WriteLine(a+x),10);
26
27 คอนโซล ReadLine();
28 }
29 }
3. ประกาศคลาสคอลเลกชัน
ก่อนที่เราจะประกาศรายการและกำหนดค่าเริ่มต้นให้กับรายการ เราต้องเขียนดังนี้:
ดู sourceprint?1 รายการ
2 list.Add("a一");
3 list.Add("b二");
4 list.Add("c三");
ไม่จำเป็นแล้ว แค่เขียนมันลงไป
ดู sourceprint?1 รายการ
2 "def", "ตกลง"
3};
4. การดำเนินการกับแต่ละรายการของคลาสคอลเลกชัน
เพื่อประมวลผลรายการในคอลเลกชันทีละรายการ เราต้องเขียนดังนี้:
ดู sourceprint?1 foreach (รายการสตริงในรายการ)
2 {
3 Console.WriteLine (รายการ);
4}
ตอนนี้ไม่จำเป็นแล้ว ไม่เป็นไร
ดู sourceprint?1 list.ForEach(a => Console.WriteLine(a));
รหัสสะอาดกว่ามาก
5. ใช้ == ลองในที่สุด
เพื่อที่จะปล่อยทรัพยากรเมื่อใช้งานเสร็จแล้ว เรามักจะใช้การใช้โดยพื้นฐานแล้วเป็นเพียงไวยากรณ์สำหรับลองใช้แบบ fiannaly ตัวอย่างเช่น
ดูแหล่งที่มาพิมพ์ 1 StreamWriter sw = null;
2 ลอง
3 {
4 sw = StreamWriter ใหม่ ("d:abc.txt");
5 sw.WriteLine("ทดสอบ");
6}
7 ในที่สุด {
8 ถ้า(sw!= null) sw.ทิ้ง();
9}
โค้ดด้านบนสามารถทำให้ง่ายขึ้นเป็น:
ดู sourceprint?1 โดยใช้ (var sw = new StreamWriter("d:abc.txt")) {
2 sw.WriteLine("ทดสอบ");
3}
6. น่ารักหลากหลาย
ไม่จำเป็นต้องเขียนประเภทที่ประกาศไว้สำหรับความหมายของ var คอมไพเลอร์จะกำหนดประเภทตามการกำหนดในภายหลังให้กับ var เมื่อยืนยันประเภทของ var แล้ว จะไม่สามารถเปลี่ยนแปลงได้เท่านั้น ตัวแปรและไม่สามารถใช้เป็นฟิลด์ได้ สร้างการประกาศพารามิเตอร์
ตัวอย่างเช่น:
ดู sourceprint?1 var write = new StreamWriter(path);
ดู sourceprint?1 สำหรับ (var i=0;i<100;i++){}
7. วิวัฒนาการของเครื่องหมายคำถาม
เครื่องหมายคำถามเก่า+โคลอน
ดูต้นฉบับหรือไม่ 1 var b = 3;
2 var a = b > 9?b.ToString():”0”+b;
New baby มีเครื่องหมายคำถาม 2 อัน หมายความว่า ถ้าตัวแปรทางซ้ายเป็น null ค่านั้นจะเป็นตัวแปรทางขวา ไม่เช่นนั้นจะเป็นค่าของตัวแปรทางซ้าย
ดู sourceprint?1 สตริง a = null;
2 var b = a??"";
8. น้ำตาลวากยสัมพันธ์สำหรับการสร้างอินสแตนซ์ประเภท
ดู sourceprint?1 Abc คลาสสาธารณะ
2 {
3 ID สาธารณะ { รับ;
4
5 ชื่อสตริงสาธารณะ { รับ; ชุด;
6
7 URL สตริงสาธารณะ { รับ;
8}
เราไม่ได้ประกาศตัวสร้างสำหรับคลาสข้างต้น แต่เราสามารถยกตัวอย่างได้ดังต่อไปนี้
ดู sourceprint? 1 โมฆะสาธารณะคงที่หลัก (สตริง [] args) {
2 var abc = ใหม่ Abc{
3ID=1,
4 ชื่อ = "หยูไคจ่าว",
5 Url=" http://yukaizhao.cnblogs.com/ "
6};
7}
9. วิธีการขยายที่เป็นตำนาน
วิธีการขยายถูกนำมาใช้ใน C# 3.5 เราสามารถเพิ่มวิธีการอินสแตนซ์ให้กับคลาสโดยไม่ต้องแก้ไขซอร์สโค้ดของคลาส สาระสำคัญของมันคือการนำน้ำตาลวากยสัมพันธ์ไปใช้
ตัวอย่างเช่น เราขยายคลาส String ด้วยเมธอด IsNumber:
ดู sourceprint?01 คลาสคงที่สาธารณะ StringExt {
02 Regex ส่วนตัวแบบคงที่ regexNumber = Regex ใหม่ (" \d +");
03 IsNumber บูลสาธารณะแบบคงที่ (อินพุตสตริงนี้)
04 {
05 ถ้า (string.IsNullOrEmpty (อินพุต))
06 {
07 กลับเท็จ;
08 }
09 ส่งคืน regexNumber.IsMatch (อินพุต);
10}
11 }
เราสามารถเรียกเมธอดนี้ได้บนอินสแตนซ์ String
ดูต้นฉบับหรือไม่ 1 var abc = “123”;
2 คือ isNumber = abs.IsNumber();
10. ใช้คลาสที่ไม่ระบุชื่อ
ดู sourceprint?1 var a = new {
2 ID = 1,ชื่อ=”yukaizhao”,BlogUrl=”http://www.cnblogs.com/yukaizhao/”
3};
คลาสที่ไม่ระบุชื่อมีประโยชน์เมื่อส่งคืนข้อมูลแบบสอบถามใน linq ไปยัง sql หรือเฟรมเวิร์กเอนทิตี
หากคุณมีน้ำตาลเชิงวากยสัมพันธ์เพิ่มเติมโปรดแบ่งปัน ในเวลาเดียวกัน ฉันหวังว่าทุกคนจะเพลิดเพลินไปกับไวยากรณ์ เพราะมันทำให้เราสะดวกสบายได้ โปรดอย่าเยาะเย้ยมัน และไม่จำเป็นต้องเยาะเย้ยมัน
http://www.cnblogs.com/yukaizhao/archive/2010/05/25/csharp-Syntactic-sugar.html