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 更是重頭戲及注目的焦點
也是值得好好一學的

2008年2月24日 星期日

哇~ 被 TrueImage 搞死了啦

http://richielin-programer.blogspot.com/2008/02/trueimage.html

大家都知道 Windows 系統備份的重要性,尤其是工作用的電腦
而 Windows XP 雖然穩定了許多,但還是有跑久了會有系統變很慢的缺點
用系統還原軟體,如 Ghost 或 TrueImage
讓 Windows 系統快速回復到乾淨的狀態是很常用的方式
在工作用的筆電上,大家幾乎都會將硬碟分割成兩顆
將 Windows 安裝在 C 磁碟上而將資料放在 D 磁碟上,系統還原時只還原 C 磁碟即可
原本應該相安無事才對,但 ...

網路上許多對 TrueImage 評價高於 Ghost 的討論
天秤也改用 TrueImage 備份一段不短的時間,也成功還原過幾次
之前都是用 TrueImage 光碟開機後,再手動指定讀取 Image 來還原
但忘了什麼發現 TrueImage 備份系統時可以直接燒錄 Image 到 DVD 片上
並可指定 One click restore 方式,讓 Image 光碟可以開機並按一鍵回復系統
看起來好像很好用的功能 (只怪當初備份後沒有完整測試過安全性...)
但恐怖的事來了,當前幾天天秤不滿意 Windows 系統速度又變慢時
拿出先前只備份 C 磁碟 Windows 系統的 Image 光碟開機並按下回復系統時
可怕的 TrueImage 竟然將硬碟上的 partition 全整合成一個 C 磁碟才還原 Windows 系統
也就是說 D 磁碟上的資料全部消失掉了
其間沒有詢問使用者是否要合併 partition,就自作主張的合併了

慘~
現在天秤放在 D 磁碟的一堆資料全不見了,包含 Email 及連絡人資料等
還有一些雜七雜八幾十 G 的資料全完蛋了,欲哭無淚啊~
連工作用的程式原始碼全完蛋了,雖然程式碼有異地備份,但還是損失了幾天的資料
但這段時間絞盡腦汁想出來的程式碼,解出來的 Bug 要怎麼辦?
都怪天秤太相信這 TrueImage 這類軟體了,還原前懶得先備份資料 (幾十 G 資料怎麼備啊?)

其實之前也有一次被 TrueImage 搞死的經驗
當時用 TrueImage 備份 20G 的 Windows 系統碟,結果重新分割系統碟為 30 G 後
沒想到 TrueImage 竟無法將原本 20G 的 Image 還原到 30G 的新分割碟
這... @^%#@&@
這在遠古之前的 Ghost 版本不就有的功能嗎? 不是應該很基本的東西嗎?
怎麼後來才出的 TrueImage 竟然不行
只好整個 Windows 重灌,多花了幾個鐘頭時間
後來覺得那就不要隨便再動 partition 大小就好,還是堅持用 TrueImage 備份
沒想到這次還是又被搞死了

決定放棄 TrueImage 了,馬上上網訂購了 Ghost 12 繁中版
(Symantec 的網路購物真是爛,搞了好幾天才訂購下載成功,不過這又是另一個故事了)
並縮短系統及資料的備份間隔時間
雖然用過後覺得 Ghost 12 還是沒 TrueImage 好用,但是安全性比較重要
希望 Ghost 12 不要再讓我失望了,天秤已經嚇到了
現在得趕快加班補上工作損失的進度了!