第一章:.NET 體繫結構(c#進階編程 第6版) (未完)

來源:互聯網
上載者:User
文章目錄
  •         1. 語言互通性中強資料類型的重要性
  •       2. 垃圾收集
  •       3. 安全性
  •       4. 應用程式定義域(Application domain)
1.1 c#與.net的關係
  • c#是專門為與.NET一起使用而設計的
  • c#並不是.NET的一部分,.NET支援的一些特性,c#並不支援,而c#語言支援的一些特性,.NET並不支援(例如運算子的重載)
1.2 公用語言運行庫
  •  .NET Framework的核心是其運行庫的執行環境,稱為公用語言運行庫(CLR,common language runtime),或.NET運行庫。
  •  通常將在CLR的控制下啟動並執行代碼稱為Managed 程式碼(managed code)。
  • 在CLR執行編寫好的原始碼之前,需要編譯他們。在.NET中,編譯分為兩個階段:
    • (1)把原始碼編譯為中繼語言(IL,intermediate language)
    • (2)CLR把IL編譯為平台專用的代碼
  • 這樣設計的優點:平台無關性,提高效能和語言的互通性。
   1.2.1 平台無關性

          到目前為止,.NET的平台無關性知識一種可能,因為現在.NET只能用於Windows平台。

   1.2.2 提高效能

         IL總是即時編譯(稱為JIT編譯),能提高速度和效能

  • 提高速度:JIT編譯器並不是一次把整個應用程式一次編譯完(這樣會有很長的啟動時間),而是只編譯它調用的那部分代碼。代碼編譯過後一次後,得到的內部可執行代碼就儲存起來,直到退出該應用程式為止,這樣在下次運行這部分代碼的時候,就不需要重新編譯了。
  • 提高效能:編譯過程的最後一部分是在運行時進行的,JIT編譯器確切地知道程式運行在什麼類型的處理器上,可以利用該處理器提供的任何特性或特定的機器代碼指令來最佳化最後的可執行代碼。                                              
   1.2.3 語言的互通性

        語言互通性:就是能將任何一種語言編譯為中間代碼,編譯好的代碼可以與其他語言編譯過來的代碼進行交換操作。

1.3 中繼語言

       中繼語言的主要特徵:

  •  

    • 物件導向和使用介面
    • 實值型別和參考型別之間的巨大差別
    • 強資料類型
    • 使用異常來處理錯誤
    • 使用特性(attribute)
   1.3.1 物件導向和介面的支援
  • 介面:提供一個契約,實現給定介面的類必須提供該介面指定的方法和屬性的實現方式。
  • c#所實現的語言互動性:
    • 用一種語言編寫的類能夠繼承用另一種語言編寫的類
    • 一個類能包含另一個類的執行個體,而不管它們是用什麼語言編寫的。
    • 一個對象應能直接調用其它語言編寫的另一個對象的方法
    • 對象(或對象的引用)能在方法之間傳遞
    • 在不同的語言之間調用方法是,能在調試器中調試這些方法調用,即調試不同語言編寫的原始碼。
   1.3.2 相異實值型別和參考型別

      對於實值型別,變數之間儲存其資料,而對於參考型別,變數僅儲存地址,對應的資料可以在該地址中找到。

   1.3.3 強資料類型
  •  中繼語言基於強資料類型,一般不允許對模糊的資料類型執行任何操作。
  • 儘管強迫實作類別型的安全性最初會降低效能,但在許多情況下,我們從.NET提供的、依賴於型別安全的服務中獲得的好處更多,這些服務包括:
    • 語言的互通性
    • 垃圾收集
    • 安全性
    • 應用程式定義域
        1. 語言互通性中強資料類型的重要性

            如果類派生自其它類,或包含其他類的執行個體,它就需要知道其他類使用的所有資料類型,這就是強資料類型非常重要的原因。

            例如,如果VB 2008中的另一個方法返回一個Integer類型的資料,但是c#沒有該名稱的資料類型,如果編譯器知道如何將VB中的Integer類型映射為c#定義的某種已知類型,就可以在c#代碼中使用返回的類型。

       這個問題在.NET中是如何解決的?

             (1) 一般型別系統(CTS common type system)

  • CTS定義了可以在中繼語言中使用的預定義資料類型,所有物件導向.NET Framework的語言都可以產生最終基於這些類型的編譯代碼。

           例如,VB 2008中的Intger實際上是一個32位的有符號整數,它實際映射為中繼語言類型Int32,因此在中繼語言代碼中就指定這種資料類型。在原始碼中,c#用int來表示Int32,所以編譯器就認為VB 2008方法返回了一個int型的值。(在c#中,編譯器識別的每一個預定義類型都映射為一個IL內建類型,這和VB 2008是一樣的)

  • 同時還定義了一個內容豐富的類型階層,其中包括設計合理的位置,在這些位置上,代碼允許定義它自己的類型。
  • 一般型別系統的階層反映了中繼語言的單一繼承的物件導向方法。

            (2) Common Language Specification(CLS common language specification) (書中內容理解不透,也不太重要,暫時跳過)

                    CTS和CLS一起確保語言的互通性。CLS是一個最低標準,所有面向.NET的編譯器都必須支援它。

      2. 垃圾收集      3. 安全性      4. 應用程式定義域(Application domain)   1.3.4 通過異常出來錯誤   1.3.5 特性(attribute)的使用1.4 程式集(assembly)1.5 .Net Framework 類1.6 命名空間1.7 用C#建立.NET應用程式1.8 .C#在.NET企業體繫結構中的作用

 

聯繫我們

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