《CLR.via.C#第三版》第二部分第8,9章節讀書筆記(四)

杭偉發表於2014-11-10

三種型別的構造方法:

例項構造器(引用型別):例項構造器永遠不能被繼承(所以方法前沒有修飾符);如果類的修飾符為static(sealed和abstract),編譯器根本不會在類的定義中生成一個預設構造器。

重要認知:為了使程式碼“可驗證”,類的例項構造器在訪問從基類繼承的任何欄位之前,必須先呼叫基類的構造器。如果派生類的構造器沒有顯示呼叫一個基類構造器,C#編譯器會自動生成對預設的基類構造器的呼叫。

              在類中宣告的欄位,實際在編譯器中是轉換成構造器中的程式碼執行初始化。如果一個類中有3個欄位,3個建構函式,那麼編譯器實際生成三次初始化3個欄位的程式碼--每個構造器一次。

例項構造器(值型別):C#編譯器不允許值型別定義無參構造器(有參的可以)。

型別構造器(靜態建構函式):只能定義一個,沒有引數,可以和普通建構函式共存,作用是設定型別例項的初始狀態。它的呼叫由CLR負責。它只執行一次(多執行緒時)。

 

擴充套件方法:

C#擴充套件方法:允許定義一個靜態方法,並用例項方法的語法來呼叫它。(只需在方法的第一個引數前加this關鍵字)

 

引數:

宣告方法的引數型別時,應儘量指定最弱的型別,最好是介面而不是基類。(講解了ref、out、params)

 

感悟:這本書講解C#這門程式語言,都是從編譯器,CLR的執行原理角度,非常深刻。這兩章個人感覺沒什麼特別重要的內容,所以列出一些重要概念,熟知這些概念即可。

相關文章