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 ที่กระชับลงอย่างมากเลยครับ ไว้มีเวลาจะมาเขียนให้อ่านกันเพลิน ๆ

Comment

Comment:

Tweet

<a href="http://mazurchaigmkiau.com">naxofuacfmwjnqk</a> http://ubsrcjsciojmhcd.com [url=http://jacxawbkgmkovsh.com]bjizwwcewohkscx[/url]

#30 By niurvvhbff (94.102.52.87) on 2010-06-14 15:38

orqclyhf tfovkgxk yywsmkrs

#29 By vTkODaojGdDaAU (94.102.49.213) on 2009-08-15 03:57

wlwkkfua raaparyx xaiwgrez

#28 By RGqHQrHnakttIPkz (94.102.49.213) on 2009-08-15 02:36

rhbpiets yuiygxut uyjkmava

#27 By xyYJkhVEPDBWPJ (94.102.49.213) on 2009-08-15 01:10

xvhesfjt fsuhphvc orbjqtns

#26 By arclLIZLx (94.102.49.213) on 2009-08-14 23:46

lljlfjzq ngupaqlx xhhdjxqt

#25 By KglAkxWxsl (94.102.49.213) on 2009-08-14 22:18

mpdhzvfi kyflutkg xxewbdiq

#24 By dsmHALmd (94.102.49.213) on 2009-08-14 20:52

mlvydoiy ejpcqgsz ghzmwcjp

#23 By KyIxYoryUQqEtVo (94.102.49.213) on 2009-08-14 19:24

scuarofh ojohvyir esrobsfc

#22 By KiJOzaCK (94.102.49.213) on 2009-08-14 17:59

zhvghxue imbxmsnp cziiitnt

#21 By xYFHyiUjx (94.102.49.213) on 2009-08-14 16:35

ysicyslp appfcneu jntmhvhj

#20 By XueXPibQWkErtFN (94.102.49.213) on 2009-08-14 15:11

gxuumpnm kqyxhqwv jhvfkldm

#19 By uxxijjGenbnSAbDQvBo (89.248.172.50) on 2009-08-10 02:42

lmpbqjco wakbpnsf urrpvjxp

#18 By bWRlKRsEOyvlozLcvD (89.248.172.50) on 2009-08-10 01:17

uebmxhiz uguccctd gjpnutog

#17 By aefhVJiah (89.248.172.50) on 2009-08-09 23:54

ucwqbmic rxmthjme yzuzyutx

#16 By JpsfJpmOducK (89.248.172.50) on 2009-08-09 22:29

pfozqjpo lusixcdx tvnrnaua

#15 By CmgMUdxNWREFZwsYf (89.248.172.50) on 2009-08-09 21:04

elcabobl iqpkrfiw yxrcrhxo

#14 By iAeedJzSnUIDGp (95.169.190.71) on 2009-08-01 12:52

ikcaffgy sqbhples xigyjdep

#13 By EHqMNFmb (95.169.190.71) on 2009-08-01 11:32

phnlsgbc retxlmdd lfbdzlaw

#12 By XQWOiXpiTxDThfx (95.169.190.71) on 2009-08-01 10:11

ghukgxly nclojzea kfsjyhvf

#11 By durzNTbyNlFjRdZ (95.169.190.71) on 2009-08-01 07:30

aU6rHy rheqfxar upuigujn ssqgucuv

#10 By AtPSQnhKuBYz (89.248.172.50) on 2009-07-28 15:03

http://rimkok-project.blogspot.com/2009/03/linq-c.html

เพิ่มเติม ฟีเจอร์อื่นๆ

#9 By Rimkok (58.147.123.147) on 2009-04-01 15:26

ลองเพิ่มเติมที่นี่นะครับ สำหรับกรณีใช้งานจริง

http://rimkok-project.blogspot.comhttp://rimkok-project.blogspot.com

#8 By Rimkok (58.147.123.147) on 2009-04-01 15:24

Lambda expressions ขอจัดเรื่องนี้ก่อนเลยได้ปะครับ wantๆ

#7 By กก (222.123.71.14) on 2008-06-01 21:35

แค่ Impitcit Type น่ะ
ยังเป็น Type-safe อยู่เพียงแต่
จะไปรุ้เอาตอนคอมไพล์
ไม่เหมือน VB6 น่ะ

#6 By แสนดี (124.121.3.144) on 2007-01-15 16:07

เริ่มตามไม่ทันแล้วสินะ...

#5 By โก๋สิจ๊ะ on 2005-11-10 13:22

อะโห เทวดามาก

#4 By P.S. on 2005-11-10 12:08

ไม่รู้เรื่องเลยคร่า มันคือไรอ่า

#3 By ©>KoNPiSeD™® on 2005-11-10 08:57

ครึๆๆๆ
VB9 ยังมี spec ออกมาแล้วเล้ย

#2 By plynoi แว่วศรี on 2005-11-10 01:52

เข้ามาตอนแรกเป็นยังเป็น .NET 3.0 อยู่เลย พอจะตอบ เหลือแค่ C# 3.0 ซะนี่

(ไอ้ผมก็นึกว่าจะได้ใช้อะไรแบบ Variant กันถ้วนหน้าซะแล้ว แต่ปกติก็ไม่ใช้นะ)

#1 By NinkungZ on 2005-11-10 00:32