?? | ใช้หาค่าที่ไม่ใช่ Null อันแรก เช่น a ?? b ?? c ถ้า a กับ b เป็น Null จะ return c |
number flag | Decimal = M Float = F Double = D Long = L เช่น 30D เป็นการสร้างค่า double ที่มีค่า 30.0 (จริง ๆ แล้ว compiler ฉลาดพอที่จะแปลงค่า constant เป็น type เดียวกับที่เรากำลัง assign เช่น double d = 10; 10 ควรจะเป็น int แต่ตอน compile จะได้ 10.0D อัตโนมัติ ไม่เสีย Performance) |
where T : | เป็นการจำกัด Generic Type โดยเติม keyword ด้านล่างต่อท้าย syntax struct: Generic Type ต้องเป็น struct เท่านั้น class: Generic Type ต้องเป็น class เท่านั้น new(): Generic Type ต้องมี public constructor แบบไม่มี parameter <Base Class>: Generic Type ต้องเป็น Type ที่ derived มาจาก base class ที่กำหนด <Interface>: Generic Type ต้อง implement interface ที่กำหนด U: Generic Type ต้อง Derived หรือ implement Type U (ในกรณีมี Type Parameter หลายตัว) |
Type Inference | อันนี้เป็น feature ใหม่ C# 3.0 ปกติ method ที่เป็น generic ต้องกำหนด Type Parameter ด้วย แต่ C# ใหม่ ถ้าคุณกำหนด Parameter ซึ่งระบุ Type นั้นแล้ว ก็ไม่ต้องระบุ Type Parameter อ่าน Post เก่า เพิ่มเติม |
Lambda | feature ใหม่ C# 3.0 เป็นการสร้าง anonymous method แบบสั้น ๆ อ่าน Post เก่า เพิ่มเติม |
Anonymous Type | feature ใหม่ C# 3.0 สร้าง Type แบบ Inline ไม่ต้องเสียเวลาเขียน class อ่าน Post เก่า เพิ่มเติม |
Object/Collection Initializer | feature ใหม่ C# 3.0 เป็นการ set property และ add items แบบ inline อ่าน Post เก่า เพิ่มเติม |
Auto Properties | feature ใหม่ C# 3.0 Post เก่าไม่ได้เขียนถึง เนื่องจากปกติเราต้องกำหนด field ให้ Property อยู่แล้ว ใช้ Auto Properties ทำให้ไม่ต้องสร้าง field เช่น public int Name { get; private set; } จะเห็นว่าไม่ต้องอ้างถึง field หลัง Property Name และ get กับ set ยังสามารถกำหนด scope ที่ต่างกันได้เหมือนเดิม |
@ (string literals) | ปกติ string เรากำหนดอย่างนี้
แต่เราก็สามารถกำหนดอย่างนี้ก็ได้ @
ต่างกันคือ แบบแรกจะมีรหัสต่าง ๆ เช่น n ขึ้นบรรทัดใหม่ แต่แบบที่ 2 ไม่ต้องมีรหัส จะเก็บ string ตามที่เราพิมพ์ทำให้อ่านง่าย (เวลาจะ escape เครื่องหมายคำพูดใช้ เครื่องหมายคำพูด 2 ที) |
enum underlining type | Type ประเภท enum สามารถกำหนด Type หลักได้ด้วยนะ ถ้าไม่กำหนดจะเป็น int โดยสามารถกำหนดเป็น number แบบต่าง ๆ เช่น byte, short, long (เฉพาะเลขจำนวนเต็ม) |
@variable name | เราสามารถกำหนดชื่อ variable/class หรืออะไรก็ตามแต่ ที่ซ้ำกับ keyword ของ C# ได้ เช่น object โดยต้องมี @นำหน้า เช่น @object โดยเวลา reflect ออกมาจะได้ชื่อนั้นแบบไม่มี @ |
event | C# มี event ด้วยนะ หลายคนไม่รู้ เราสามารถ subscribe และ unsubscribe event ได้ และสามารถกำหนด code ตอน add/remove event ได้ (ลองหาข้อมูลเอาเอง มันเยอะมาก) |
string format | เราสามารถ format ให้แสดงวงเล็บปีกกาได้ ดูตามตัวอย่างเลยครับ int foo = 3; string bar = 'blind mice'; String.Format('{{i am in brackets!}} {0} {1}', foo, bar); //outputs '{i am in brackets!} 3 blind mice' |
? : | Conditional Operator สะดวก เวลาจะเขียน if else แล้วกำหนดค่า เช่น int foo = (trueOrFalse) ? 1 : 2; |
ลงตัว ctp สำหรับ 2.0 ไงครับ