2008年2月27日 星期三

Visual C# 3.0 新語法筆記

http://richielin-programer.blogspot.com/2008/02/visual-c-30.html

Microsoft 發佈了 Visual Studio 2008 Express 後
其 C# 3.0 也正式與大家見面了
C# 3.0 對程式語法及特性進行了一些改進
這些改進對 C# 語言提供了更簡捷的用法,主要改進如下

  • 隱含型別宣告 (Local Variable Type Inference)
  • 自動執行屬性 (Auto-Implemented Properties)
  • 匿名型態 (Anonymous Types)
  • 物件初始化 (Object Initializers)
  • 集合初始化 (Collection Initializers)
  • 擴展方法 (Extension Methods)
  • Lambda 表達式 (Lambda Expression)
  • Lambda 表達式樹 (Lambda Expression Trees)

##CONTINUE##

A. 隱含型別宣告 (Local Variable Type Inference)

宣告變數時不必指定型態,而是由代入的變數值來決定型態
這種隱含型別宣告的方式 JavaScript 或 VB 程式設什師應該不陌生
但是隱含型別宣告也有以下限制
1. var 為關鍵字,依照後方給的參數來決定型態
2. 初始時就必須給值,不可空白或給 NULL
3. 型態一經初始決定後,只能儲存同型態的值
4. 隱含型別可以指定陣列,但陣列的值必須為相同型態
宣告方式如下



B. 自動執行屬性 (Auto-Implemented Properties)

自動執行屬性可以幫助產生 get/set 屬性,而不用手動建立
例如在原本 Visual C# 2.0 時,我們建立一個類別
必須分別為類別建立 get/set 屬性



而 Visual C# 3.0 語法之下,可以簡寫成



C. 匿名型態 (Anonymous Types)

匿名型態可以讓我們靈活的建立使用類別,而不需要事先建立類別代碼
產生匿名類別必須用 var 來承接
而當匿名型態內參數型態完成相同時,也可以做運算處理



D. 物件初始化 (Object Initializers)

以往建立物件時如要一併初始化物件內變數,必須對該類別定義初始化函式
而 Visual C# 3.0 物件初始化新功能,則可以直接對該物件變數下達初始化動作
初始化時必須指定變數名稱及值,可不必指定所有變數
亦表示未指定的變數將以型態預設值存在


E. 集合初始化 (Collection Initializers)

不只類別物件可以初始化,集合亦可初始化集合內個數及值
當集合和物件初始化併用時,將可以語法更有彈性及代碼更加的簡潔



F. 擴展方法 (Extension Methods)

以往我們使用型態時,往往因為該型態沒有我們想要的方法可以呼叫
必須另設函式或是繼承來處理達到想要的目的
現在擴展方法可以讓我們在型態或類別中添加新方法,不用重新繼承或重新編譯原本類型
擴展方法只能在靜態類型 (static) 中使用
並且以關鍵字 "this" 放在方法的第一個參數前來標識
擴展方法後,在整個 namespace 中都可以使用
例如 string 並沒有轉成 int 的方法,以往我們必須以 Convert 類別來處理型態的轉換
現在可以用擴展方法來為 string 添加轉型成 int 的方法
先宣告轉型方法


使用如下,string 型態已多了轉型成 int 的方法了
範例中並沒有加入例外處理,實際撰寫時還是得加上例外處理



G. Lambda 表達式 (Lambda Expression)

委任 (delegate) 的好處不少,充份運用時可以讓程式碼更簡潔易讀
雖然 Visual C# 2.0 已經為委任使用提供了比較簡短的呼叫方式
但在 Visual C# 3.0 Lambda 表達式更是讓代碼更加洗煉不少



原本委任方式



Lambda 表達式



Lambda 表達式參數類別可以為隱含型別或一般型別
當遇到隱含型別時,Lambda 將依運算式來自動判斷型參數型別
而 Lambda 參數個數可以為一或多參數,甚至是沒有參數
當一個參數時,其括號可以省略



H. Lambda 表達式樹 (Lambda Expression Trees)

Lambda 表達式樹允許我們在處理數據時也用 Lambda 表達式
例如在 List<t> 類別中,依規則取出指定的資料



在軟體巨人 Microsoft 這個母親的努力下
很興奮的是 Visual C# 3.0 的新功能確實讓 C# 開發人員能以更輕鬆的方式開發
並且程式保有 C# 一貫的嚴謹及簡潔的代碼
而剛推出的 Visual Studio 2008 及 .NET Framework 3.5 當然不只是 C# 語法的加強
對程式人員來說,LINQ 更是重頭戲及注目的焦點
也是值得好好一學的

2 意見:

Tommy 提到...

天秤大. 拜讀您的 C#文章, 對於你洗練簡約的文章特別容易理解, 許多以往不清楚的觀念, 也豁然開朗.甚為感謝. 有一不情之請. 我對 delegate 的觀念一直都不清楚. 因為我非相關科系. 都是自己興趣學習. 有一些觀念怎麼都看不懂. 希望天秤兄能夠抽空舉個例子,說明一下 delegate的觀念與用法. 謝謝

una 提到...

不太懂
為什麼要不宣告類型
宣告好,它幫忙檢查很好用啊..@@