C# 3.0 new feature
posted on 10 Nov 2005 00:26 by tidno1 in csharp-and-dotnet.NET 2.0 ก็ออกมาอย่างเป็นทางการแล้ว รวมทั้ง IDE อย่าง vs 2005 ก็ออกมาให้ดาวน์โหลดกันฟรี(express edition) แล้ว แต่ท่านรู้หรือไม่ spec ของ C# 3.0 ก็ออกมาก่อนหน้านี้แล้วเหมือนกัน หลาย ๆ เว็บก็มี (p)review กันแล้วล่ะ
เอาของเก่ามาเล่าใหม่อีกครั้ง จะเป็นไรไป
-
Implicitly typed local variables
เป็นการประกาศตัวแปรใหม่ แบบไม่ต้องกำหนด data type โดยการดูจาก type ของ initialized value โดยประกาศได้โดยใช้ keyword var คุ้น ๆ มั้ยครับ กับ keyword นี้ ก็แหม คุณ Anders Heljsberg เป็นคนออกแบบนี่นา อะไร อะไรมันก็ต้องเอา Delphi มาใช้กันหน่อย เอ๊ะ หรือว่ามันจะมาจากคำว่า variant ใน VB หว่า (ไม่ใช่หรอก var ย่อจาก variable เป็น keyword จาก Delphi น่ะแหละ)
ตัวอย่างก็ขอเอามาจากใน specification doc เลยละกันvar i = 5; var s = "Hello"; var d = 1.0; var numbers = new int[] {1, 2, 3};ซืึ่งจะมีความหมายเดียวกับint i = 5; string s = "Hello"; double d = 1.0; int[] numbers = new int[] {1, 2, 3};โดยข้อกำหนดของการประกาศ type แบบ implicit มีอยู่ว่า- การ declare ตัวแปรจะต้องกำหนดค่าให้ทันที
- ค่าที่กำหนดจะต้องเป็น expression
- ไม่สามารถกำหนดค่า null ให้ได้(ก็แหงล่ะ ไม่งั้นจะระบุ type ยังไงล่ะ)
var x; var y = {1, 2, 3}; var z = null; -
LINQ(Language Integrated Query)
ตามชื่อแล้ว linq เป็น query ที่ติดตัวมากับภาษาเลยโดยใช้ดึงข้อมูลออกมาจาก collection ใด ๆ ก็ได้ และถ้า MS ออกแบบ query มาใหม่ ก็คงจะไม่ทำให้ syntax มันใช้งานยากหรอกครับ linq นั้นมีรูปแบบที่ใกล้เคียงกับ SQL มาก ๆ keyword นั้นก็คล้ายคลึงกับ SQL มากนัก ทั้ง "SELECT", "FROM", "WHERE", "GROUPBY", "ORDERBY", "DISTINCT"
ส่วนตัวอย่างขอดัดแปลงจากบล็อกของคุณ pok ละกันครับ เค้าเขียนไว้ดีแล้วstring[] aBunchOfWords = {"One","Two", "Hello", "World", "Four", "Five"}; var result = from s in aBunchOfWords where s.Length == 5 select s; foreach(var str in result) { Console.WriteLine(str); }มีตัวอย่างอีกเยอะแยะใน 101 LINQ Samples จาก msdn/vc#/future
จริง ๆ แล้วยังเหลือ feature เจ๋ง ๆอีกอย่างเช่น "Extension methods", "Lambda expressions", "Object and collection initializers", "Anonymous types", "Implicitly typed arrays", "Expression trees" โดยเฉพาะ Lambda expressions นั้นถ้านำมาใช้ร่วมกับ anonymous method ใน C# 2.0 นั้นจะได้ code ที่กระชับลงอย่างมากเลยครับ ไว้มีเวลาจะมาเขียนให้อ่านกันเพลิน ๆ
ไม่รู้เรื่องเลยคร่า มันคือไรอ่า
(ไอ้ผมก็นึกว่าจะได้ใช้อะไรแบบ Variant กันถ้วนหน้าซะแล้ว แต่ปกติก็ไม่ใช้นะ)
#1 By NinkungZ on 2005-11-10 00:32