深入解析C#精彩書評

china-pub發表於2010-06-24

深入解析C#精彩書評

本書詳細資訊頁面地址:

這是一本純粹的C#語言的書,和.NET Framework 關係不大,和CLR 關係不大。正如本書的前言作者所說,作者本身的意圖就是講解C#語言,使每個喜愛C#的程式設計師能夠得心應手的工作,最後這本書的定位就是一本C#語言從1.0-3.0 的專著,並且書中很明顯的給出了C#1.0-3.0 的程式碼風格的轉變。

這本書我從china-pub 預訂開始就開始關注,因為當時看了本書的目錄,就發現這本書絕對是一本進階書籍,絕對是每個希望提高自身對C#語言掌握,提高使用C#做設計的讀者必須要閱讀的一本書,當china-pub 放出這本書的第一章和第二章樣張的時候,我立刻就下載閱讀,第一二章剛好是本書的第一部分,也是本書最淺顯的基礎知識部分。但是非常難得的是,這本書從第一章就已經吸引了我,在第一章就沒有拖泥帶水,沒有什麼if…else,沒有while,沒有C#的原生型別結構講解,直截了當的進入到實戰,先給出C#1.0 版本的一個例子,接下來是2.0 時對這個例子的一些程式設計風格的轉變,並且給出C#2.0 對1.0 的提升的優勢,接下來就是在2.0 的基礎上進入3.0 語法階段,從第一個例子立刻可以瞭解到C#從1.0-3.0 語法轉變,立刻進入實戰狀態。在第一章的最後,回顧了一下C#和.NET Framework的誕生歷史,給了一個對照表格,幫大家理清一些歷史,不過這部分意思不大,我更加關心的是如何使用C#實戰,因為C#這個語言一直在考慮程式設計師的感受,一切都為程式設計師著想,配合強大的Visual Studio IDE,使用C#開發一直以來都是一種愉悅的享受。

本書第二章一開始就複習了從C#1.0 中最重要的幾個基本技術,而第一個技術則是委託,作者使用了4 句話就清晰易懂的講解了如何讓委託做事,這對於一些初學C#,覺得委託難以理解的開發者來講,這短短的一節已經可以足夠教會你委託是什麼,它有什麼用。最關鍵的是在講解委託的過程中,提到了我在現階段所有的中文C#書籍中從來沒看到的關於委託例項造成記憶體洩漏的問題,這個雖然我已經在網上一些C# Blog 上看到過了,但是這本書有一個簡明的提要,至少會提醒讀者,原來C#也會記憶體洩漏,並且沒有讓人想到的洩漏記憶體的會是委託。提到這裡,我想對出版社提一下改進意見,本書在講到一些重要的概念的時候是使用了明顯的區別字型對該概念進行區分,而中文版時,使用的印刷字型卻區分並不明顯,從而導致讀者容易忽略這些細節,希望出版社日後在翻譯書籍時,能夠在重點位置使用更加明顯的記號做出標記。

第三章開始進入本書的第二部分,也就是對C#2.0 實戰中的一些需要注意的高階語言特性的正確使用的講解,這一章也是直接就上C#2.0 中對1.1 改進最為顯著的泛型,首先回顧了一下泛型基礎和泛型在實戰中的基本使用方式。最重要的是從3.3 節開始的深化和提高,後面的內容絕對值得每一個C#程式設計師閱讀,講到了C#2.0 泛型的一些高階特性,並且給了一些實戰的程式碼段,這本書上講解的泛型知識,我閱讀的所有的中文C#書籍上從來都沒有深刻的講解過,絕對不是泛泛而談,都是一刀見血的直切要害,看的讓我大呼過癮,但是前提是必須要有良好的基本功,否則閱讀起來會有一定的困難。本章最後用C#和C++、Java之間的泛型進行了對比,提到了C#泛型的不足之處和相對於Java 泛型的優勢,至少對於讀者來講會有一個清晰的對比。

本書第四章是我個人認為全書最不值得閱讀的一章,因為這個可空型別在任何一本比較全的C#語言的書中都有一些介紹,而且那些基本的介紹已經足以學會使用該特性了,本書僅僅在這個話題上增加了一些經驗之談,而最有價值的則是4.4 小節,這個小節根據作者的經驗提出了可空型別的新奇用法(雖然說是新奇用法,實際上是經驗之談),而這部分內容對於專案實戰來講,還是有意義的。

第五章主要是回顧了C# 1.0 中的委託,到C# 2.0 後對委託的改進,並且在本章為大家打好委託的基礎,使大家進入到C# 3.0 的Lambda 時能夠有良好的基礎去理解Lambda 表示式,這章的鋪墊作用很好,並且在最後一個小節時,講解了一般的C#程式設計師沒有去深入理解的閉包捕捉變數的作用域問題。

第六章回顧了C# 1.0-C# 2.0 的迭代器的演變,從C# 1.0 編寫複雜程式碼實現迭代器,到C# 2.0 新增yield return 關鍵字,交給編譯器內部生成迭代器程式碼,這些內容都非常基礎,是每個C#程式設計師都應該已經掌握的內容,直到6.3 節開始實戰,舉了幾個暢快凌厲的例子,引出本章最後一個小節迭代器的新模式,也就是未來的庫中可能會引進的新的實現模式,看後深感自己對迭代器的認識太少,非常痛快。

第七章則是對C# 2.0 語法中新增的其他特性進行了一次統一的講解,每個新特性篇幅較短,但是都非常清晰的講解了這些特性,相信讀者也能從中學習到一些新的經驗和認識。

第八章開始對C# 3.0 的新特性講解,目的是為了引匯出後面的C#語言最具革新的LINQ,而前面的一切都是為了後面的LINQ 打牢基礎,本章主要是講解一些3.0 中最基本的自動實現屬性,隱式型別,物件和集合初始化器,隱式型別陣列和匿名型別,其實這些技術每個緊跟微軟.NET Framework 更新的程式設計師應該都已經非常瞭解了,每本基礎的C#書籍對這些基礎講解的很清晰了,對本章技術點比較熟悉的讀者完全可以跳過本章。第九章開始是本書的高潮部分了,這部分是講解C# 3.0 中的新特性,而難度也開始逐漸提高,因為畢竟C# 3.0 是融合了C# 1.0 的地基,C# 2.0 的提高,到達了函數語言程式設計這一站,而現在由於並行越來越成為主流,而Anders 也早已看到這一點,所以C#的函式式也是必然的發展,並且同時引入了LINQ 這個極其重要的技術,為下一代PLINQ 打下堅實基礎,並且如果是C#愛好者的話,一定早已熟悉了C#3.0 的新特性,但是本章的難度絕對讓一箇中級的程式設計師感到不會白白花費時間在這一章,這一章的技術要點都是非常基礎而又非常重要的,如果基礎夠堅實,我相信其他讀者也會在本章中學到如何使用C# 3.0 做設計,而本章難度最大的則是在最後一個小節,如果讀者有C++語言背景的話,對本節的理解將會容易很多,因為C++的泛型更加強大和複雜。

第十章算是LINQ 基礎的前沿最後一章,本章介紹擴充套件方法,首先本章介紹了一些使用擴充套件方法的小技巧,接下來進入到擴充套件方法的最具有意義的部分,也是LINQ 的本質意義,就是對資料進行流式的操作,比如
var collection = Enumerable.Range(0, 10)
.Where(x => x % 2 != 0)
.Reverse();
這樣的形式必然比:
var collection = Enumerable.Reverse(
(Enumerable.Where(
(Enumerable.Range(0, 10),
x => x % 2 != 0));
這樣的形式順眼和易於理解的多。上面的程式碼完全是按照人的思維進行的,而後者則需要人使用反向思維模式對程式碼進行閱讀。最後本章提醒各位讀者,使用擴充套件方法並不是所有的靜態助手類都應該成為擴充套件方法,而是應該理智的使用,寫擴充套件方法始終應該是一種有意識的決定,而不是習慣。

第十一章開始介紹本書的重頭戲LINQ,本章也是全書難度較大的章節,有了前面的基礎作為鋪墊,那麼理解本章是比較容易了,這章也是LINQ 中最應該掌握的LINQ to Object。當然仍然是本書的風格,從最基本的語法特性講起,一直逐漸複雜直到講解完所有的LINQ toObject 語法特性,當然這些語法特效能夠完全用在後面的LINQ to SQL、LINQ to XML、LINQ toDataSet……。

第十二章非常自然的將LINQ 的其他提供器一起講解了,由於有了十一章的學習,那麼這章只是對其他提供器進行介紹,按部就班的學習即可了,同樣我也認同作者,學習LINQ,請閱讀LINQ 中最優秀的一部書《LINQ In Action》,這本書已經由人民郵電出版社圖靈程式設計叢書引進翻譯,並且翻譯質量也很高,這本書也是我個人認為學習LINQ 最好的一本書。

第十三章是本書的總結性的章節,總體來看本書是一本很優秀的C#語言特性的學習書籍,絕對值得閱讀,說了本書這麼多優點,也說說這本書的缺點,這本書的缺點我個人認為就是技巧方面的知識點過少了,以作者對C#語言的掌握程度來看,他如果能在書中加入更多的使用C#進行程式設計設計的技巧,那麼本書就可堪稱完美。無論如何這本書都是每一箇中級C#程式設計師向更高層次進階時必讀的一本書,我個人強烈期待本書第二版,希望第二版能延續本書的內涵,對C#4.0 來一次深層次的講解。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16566727/viewspace-666072/,如需轉載,請註明出處,否則將追究法律責任。

相關文章