.Net架構基本概念(讀書筆記——叩響C#之門)

來源:互聯網
上載者:User

  一直對.Net架構迷迷糊糊的,今天看到這一章,終於幫我理清了思路。

第一、.Net架構應理解為代碼的執行環境:一方面它管理代碼的執行過程,另一方面它為代碼提供類庫支援。

  通用語言執行平台(CLR)則是管理代碼的執行過程。它負責運行代碼、確保代碼的安全性和準確性;並負責管理記憶體、線程調度等核心任務。通常我們把在CLR控制下的啟動並執行代碼稱為Managed 程式碼。

  .Net 架構基礎類庫(FCL)則是代碼的類庫支援者。

第二、C#和.Net的關係

C#原始碼——編譯——微軟中繼語言(MSIL)——經過JIT(即時編譯)——機器語言。

JIT提高效能:因為JIT編譯是在程式運行時發生。

MSIL為語言的互操作行提供了可能:因為不同語言編寫的組件最終都編譯為中繼語言,然後組成一個完整的程式。

msil理論上可以運行在任何安裝了.net架構的作業系統上。

第三、CTS一般型別系統和Common Language Specification(CLS)

  以前一直搞不清為什麼C#用Int和Int32表示同一種類型,現在終於明白了。INT32等是MSIL語言的類型——CTS類型——一般型別系統的標準的基礎資料型別 (Elementary Data Type),只是在不同語言中有不同的表示方法。如C#裡是INT,C++裡是(sign)int.也就是說不管是C#的int還是C++的(sign)int最終都編譯成MSIL的INT32類型。

一般型別系統不但指定了基本的資料類型,還定義了一個內容豐富的類型階層。

  CLS是所有.NET語言都支援的語言規範。也就是說Common Language Specification中的文法規則在所有.NET語言中都成立,它是所有.NET語言都支援的文法規則的交集。從而,符合CLS規範的代碼轉換為中繼語言後能被.NET上任何語言訪問,從而確保不同語言的互操作行。當然,編寫不符合CLS規範的代碼也是可以的,但是不能保證不同語言的互通性。

類型的判定:

sizeof:擷取資料類型在記憶體中的位元組數。但不能擷取自己定義的類的資料類型的位元組數。

typeof:擷取資料類型的CTS類型名,故起參數只能是類型。也就是編譯成中繼語言後的類型。自己定義的類型也可以擷取。

GetType:擷取某個變數的類型。

is運算子:檢驗某個對象是否是某種類型。有點與GetType類似,但是當對象和類型之間是繼承關係式,is運算子仍然會返回TRUE。

命名空間:命名空間是用來組織類的,避免兩個類庫的重名。

 

裝箱、拆箱:

實值型別——參考型別:裝箱(隱藏)

參考型別——實值型別:拆箱(顯示轉換)

對象的相等:

ReferenceEquals()和Equals()和相等運算子(==):

ReferenceEquals()和Equals()預設情況均比較引用符,但是我們可以對Equals()進行重寫,使之比較實值型別;

相等運算子(==):預設情況下,若兩個對象為實值型別,則比較值;若兩個對象為參考型別,則比較引用符。但是我們可以用重載運算子的方法加以改變。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.