1. 程式人生 > 其它 >CLR Via C# 讀書筆記(待續)

CLR Via C# 讀書筆記(待續)

  當年張三丰教張無忌太極拳曾問過:“無忌你記住了嗎?”,無忌答“忘完了”。張三丰哈哈大笑:“好”,於是無忌學會了太極拳。但現實中,書看一遍忘完了,是真的忘完了。。。現在也沒心思再自己專細節,這部分內容待我第二次讀的時候再完善吧(逃...)

寫在最前面

  到了年末摸魚的歡樂時光,可以乾點別的事情。首先介紹下我自己,2021年工作半年,入坑WPF。有幸遇到以為很厲害的前輩,跟我講WPF的精美設計,前衛思想。不管WPF未來如何,的確能學到很多東西。這裡記錄分享看過的《CLR Via C#》。這裡多說幾句,私以為部落格園雖然有很多大神寫的精妙文章,讓人佩服他們的深度,但是作為初學者看這些文章是不夠的。沒有建立系統的框架,這些知識點很快就會忘記。零食雖好吃,但是長身體仍需主食。這裡只是對這本書的概括理解,如何有興趣,一定要去看原書。最後,在下見識短淺,歡迎各位看官批評指正。

簡介

這本書能夠學到什麼?
  在看這本書之前,我一直對程式的執行過程一知半解,比如編寫的C#程式碼是如何在記憶體中載入,如何開始執行。這些底層知識對如何正確高效地設計程式碼有著重要的作用,例如,如何加快程式的執行速度(減少記憶體分配,減少耗時方面),如何理解複雜的執行緒併發互動。這本書較為系統地講解了CLR,Common Language Runtime的設計理念,什麼是CLR?類似於Java的虛擬機器,CLR也是一個抽象的概念。可以把它當做一個程式,一個作業系統會呼叫的初始化程式。執行C#,F#等語言編寫的程式所需要的.net framework和.net core又是什麼?它們是基礎的類庫,其中一些庫只能由CLR使用,一些庫提供給開發人員使用(這兩部分概念是我自己理解,可能有誤)。CLR提供了記憶體管理、程式載入、安全性、異常處理、執行緒同步等功能。這本書的內容很是深刻,不是粗淺過一遍就能完全理解,但不必追求完全理解,在工作過程中時常翻閱,一定能夠大有裨益。

CLR基礎

  這部分內容屬於平時用到比較少的,主要講解了1.編寫的C#程式碼如何編譯,如何執行。2.c#的變數和函式是如何儲存到模組中的(dll)3.對於dll的管控問題,如何解決相同的dll名字造成的

設計型別

  這部分介紹CLR中的型別
  4.基礎型別:所有的類的基類System.Object類(有哪些函式);型別的轉換(as,is);名稱空間(解決了重複問題);型別物件在執行時如何在堆疊中分配空間;
  5.基元型別,引用型別和值型別:基元型別(int,double);引用型別和值型別(是否在堆中分配);拆箱與裝箱(有很多函式是以object型別作為引數,當傳入int,doubled等值型別時,會在堆中分配記憶體,封裝成物件,利用好這一點能夠優化程式設計的速度和記憶體);物件雜湊嗎;dynamic型別(在編譯時檢查定義為dynamic變數的型別,再呼叫函式)
  6.型別和成員基礎:型別的各種成員(敞亮,欄位,例項構造器等等);型別可見性(private,protect,internal);成員可見性;靜態類;分佈類(partial);多型和版本控制(virtual)
  7.常量和欄位:const和readonly(前者以值嵌入到dll中)改動需要重新編譯
  8.方法:構造器(值型別不允許無參);型別構造器(static);過載;擴充套件方法(this)
  9.引數:可選引數(預設引數);隱式區域性變數(var);以應用傳遞引數(ref out);可變引數(params)
  10.屬性:無參屬性;有參屬性(c#索引器)
  11.事件:如何定義事件(1.引數args2.事件成員event3.on方法4.輸入轉化為事件);實現事件
  12.泛型:FCL泛型(已定義System.Array等且有大量方法);泛型基礎(每個泛型都是一個新類,list從object,dictionary從dictionary<string,guid>);泛型介面;泛型委託;泛型逆變和協變(引數可以為派生,返回可以為基類);泛型方法;可約束性和約束(Where T)
  13.介面:隱式介面和顯示介面(前者為預設,後者為介面中定義的方法);泛型介面
  

基本型別

  14.字元、字串和文字處理:char型別;string型別(文化,字串留用);stringbuilder(轉化為string);tostring(格式化方法);解析(parse);編碼(Unicode);安全字串(securestring)
  15.列舉型別和位標誌:
  16.陣列:初始化;轉型(向上);派生自system.array;實現IEnumberable,ICollection,IList;建立下限非0;不安全的陣列(stackalloc)
  17.委託:委託的實現;如何顯示呼叫委託鏈;減少委託
  18.定製特性:
  19.可用值型別:

核心異常

  20.

執行緒處理

  21.