給C#學習者的建議 – CLR Via C# 讀後感

來源:互聯網
上載者:User
CLR Via C# 是一本經典的講述CLR的教材,一直想好好讀讀,卻一直沒有去讀。

去年年末,終於下決心,買了一本紙質的CLR Via C#,元旦這幾天在家裡閉門讀書(3天元旦 + 2天自己的帶薪假期)。

    其實,早就在網路上下載過了電子版的英語的CLR Via C#了,不過,電子書的問題也很明顯,由於是免費的,所以不是很重視,買了紙質的書,自己花了真金白銀,所以格外重視,不能對不起人民幣啊(古人說的,書非借不能讀,其實也說明了這個意思)。加上這樣的書,讀原版是相當痛苦的,還是讀中文的比較靠譜。

    去年的11月份,有一篇  【1個月學會C++ 】的博文,引起了罵戰,按照這篇博文的邏輯,CLR一書的作者也可以歸為垃圾了。不過,我想能一直在這裡看博文的同志,不是那種只想看電視,而不想知道電視機內部的原理的人吧。這裡和CSDN的論壇不一樣,CSDN的論壇,索取的人比較多,項目做到一半,出現了無法解決的問題,自己懶得去Google,然後急急忙忙註冊個帳號,發個有點挑釁的標題,《是高手的,就進來挑戰一下》云云,然後就坐等答案。這裡的人,更多的是分享,以及對於底層的探索。

     NET,屬於入門容易,學好難的東西。我可以說,使用NET寫個HelloWorld,在宇宙第一的IDE協助下,一個小時就可以了。21天學會C#,也是非常容易的。如果,你的目標只是靠C#找個專做資料查詢,插入,刪除的外包的職位,我覺得,你可以不必花時間學習 CLR 這本書了,有時間的話,考個日語一級什麼的比較划算。如果,你有足夠的好奇心,想知道一些CLR內部的原理的話,強烈建議去好好讀讀這本書。

    當然,如果你是初學者,不建議一開始就讀這本書,而是建議,先動手寫幾個月的C#,然後積累一些心得體會,或者是一些疑問,然後帶著疑問去讀CLR,這個是最好的了。一些東西,直接把答案放在你面前,缺少你的獨立思考,是沒有辦法完全映入腦子裡面去的,過點時間就忘記了。我來說說我以前一直糾結的一些事情吧:

    1.大寫的String 和 string 到底有什麼區別?(5章 基中繼資料)

    2.Animal t = New Cat(); ,這個時候 t 的方法到底是Animal的,還是Cat?(4章 實方法和虛方法)

    3.字元駐留的概念到底是怎麼樣子的?(14章 字元)

       4.編譯好的EXE檔案,在你雙擊了這個檔案到列印出HelloWorld之間,到底發生了什麼事情?(1-3章,22章AppDomain)

       這些答案都可以在CLR一書中找到答案。

       這本書的另一個特點是,代碼很規範。例如,以前做一個自訂的控制項,要實現一個事件,就定義一個Event在控制項裡面,然後在父表單中將委託和處理的Handle使用+=綁定一下就結束了。讀了CLR以後,知道一個標準的Event應該怎麼做,什麼樣子的才是規範的,比如你需要定義一個EventArgs等等。

        比起很多博文裡面純文字 + 代碼的解說,這本書裡面的圖,也很贊。很多原理,在插圖的協助下,讓人一下子就記住了。例如在講解

                2.Animal t = New Cat(); ,這個時候 t 的方法到底是Animal的,還是Cat?

        的時候,線程棧,對象堆的圖就很容易理解。講解委託鏈的配圖,也將大家的學習成本降低了很多。

        這本書最牛的地方就是,把一些我們司空見慣的東西,從源頭上講明白了,例如一個 event 關鍵字後面,其實包含了一個委託,兩個操作委託鏈的方法。匿名方法,其實編譯器在後台還是把文法糖還原成為了一個新的CompileGenerate(編譯器產生)的類。如果你知道這些東西的話,你的NET水平會增加很多,或者說,能夠突破你的能力的瓶頸,或者,能讓你在技術的論戰中,有足夠的底氣和論據。

       如果你有時間,我建議你通讀全書,如果再有時間,希望能夠一頁一頁讀,反反覆複的讀。如果你真的很忙,建議,4-19章必須至少讀一遍。

       如果有可能的話,把你的感想寫在書得空白處,如果你愛惜書的話,可以使用 N次貼,把讀書筆記貼在上面(我是這樣乾的,字寫得不好。。。)。如果能寫在部落格上,也是個好主意,寫過一遍的東西,記得更深刻了。

       當然,你只是想看電視,不想知道電視機背後的原理,還是學點別的東西比較靠譜。

 

      最後我談談C#和CLR。C#不是CLR的全部,只是一種實現罷了。不要以為C#的標準就是CLR的標準。

      例如:CLR的規範是 變數不區分大小寫.(VB.NET是不區分變數大小寫,所以Common Language Specification是不區分變數大小寫,不然的話,C#的程式,VB無法使用)

             傳回值類型不同的方法,可以認為是不同的方法,例如 public int GetSomething() 和 public String GetSomething() 是不一樣的方法。不過除了IL之外,所有的語言都不允許這樣。

    

      和書的作者擔心的一樣,大家將C#慢慢和CLR劃等號了,以為C#的規範就是CLR的規範(VBNET,Vber的悲哀),所以有必要把兩者的關係分開來。原本MS希望通過IL層,希望百花齊放,百家爭鳴,不過,看樣子,變成C#一家獨大了,IL的重要性很微妙了(MONO好像也是有自己規範的IL的,不是只做CLR)反正只有C#了,反正各個平台有自己的IL規範,直接C#到Native,效率問題也解決了。

      

    

   

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.