c# 程式在 .net 上執行,而 .net 是名為公共語言執行時 (clr) 的虛執行系統和一組類庫。 clr 是 microsoft 對公共語言基礎結構 (cli) 國際標準的實現。 cli 是建立執行和開發環境的基礎,語言和庫可以在其中無縫地協同工作。
用 c# 編寫的源**被編譯成符合 cli 規範的中間語言 (il)。 il **和資源(如位圖和字串)儲存在副檔名通常為 .dll 的程式集中。 程式集包含乙個介紹程式集的型別、版本和區域性的清單。
執行 c# 程式時,程式集將載入到 clr。 clr 會直接執行實時 (jit) 編譯,將 il **轉換成本機指令。 clr 可提供其他與自動垃圾**、異常處理和資源管理相關的服務。 clr 執行的**有時稱為「託管**」(而不是「非託管**」),被編譯成面向特定平台的本機語言。
語言互操作性是 .net 的一項重要功能。 c# 編譯器生成的 il **符合公共型別規範 (cts)。 通過 c# 生成的 il **可以與通過 .net 版本的 f#、visual basic、c++ 或其他 20 多種與 cts 相容的任何語言所生成的**進行互動。 乙個程式集可能包含多個用不同 .net 語言編寫的模組,且型別可以相互引用,就像是用同一種語言編寫的一樣。
除了執行時服務之外,.net 還包含大量庫。 這些庫支援多種不同的工作負載。 它們已整理到命名空間中,這些命名空間提供各種實用功能,包括檔案輸入輸出、字串控制、xml 分析、web 應用程式框架和 windows 窗體控制項。 典型的 c# 應用程式廣泛使用 .net 類庫來處理常見的「管道」零碎工作。
using system;
class hello
}
「hello, world」程式始於引用 system 命名空間的 using 指令。 命名空間提供了一種用於組織 c# 程式和庫的分層方法。 命名空間包含型別和其他命名空間。例如,system 命名空間包含許多態別(如程式中引用的 console 類)和其他許多命名空間(如 io 和 collections)。 借助引用給定命名空間的 using 指令,可以非限定的方式使用作為相應命名空間成員的型別。 由於使用 using 指令,因此程式可以使用 console.writeline 作為 system.console.writeline 的簡寫。
c# 有兩種型別:值型別 和 引用型別。 值型別的變數直接包含它們的資料。 引用型別的變數儲存對資料(稱為「物件」)的引用。
以下大綱概述了 c# 的型別系統。
列舉型別
結構型別
可以為 null 的值型別
元組值型別
引用型別
介面型別
陣列型別
委託型別
delegate 型別表示引用包含特定引數列表和返回型別的方法。 通過委託,可以將方法視為可分配給變數並可作為引數傳遞的實體。 委託類同於函式式語言提供的函式型別。 它們還類似於其他一些語言中存在的「函式指標」概念。 與函式指標不同,委託是物件導向且型別安全的。
class、struct、inte***ce 和 delegate 型別全部都支援泛型,因此可以使用其他型別對它們進行引數化。
[important]c# 支援任意型別的一維和多維陣列。 與上述型別不同,陣列型別無需先宣告即可使用。 相反,陣列型別是通過在型別名稱後面新增方括號構造而成。 例如,int 是 int 型別的一維陣列,int[,] 是 int 型別的二維陣列,int 是由 int 型別的一維陣列或「交錯」陣列構成的一維陣列。
可以為 null 的型別不需要單獨定義。 對於所有不可以為 null 的型別 t,都有對應的可以為 null 的型別 t?,後者可以包含附加值 null。 例如,int? 是可儲存任何 32 位整數或 null 值的型別,string? 是可以儲存任何 string 或 null 值的型別。
c# 採用統一的型別系統,因此任意型別的值都可視為 object。 每種 c# 型別都直接或間接地派生自 object 類型別,而 object 是所有型別的最終基類。 只需將值視為型別 object,即可將引用型別的值視為物件。 通過執行 裝箱 和 取消裝箱操作,可以將值型別的值視為物件。
c# 中的關鍵組織結構概念包括程式、命名空間、型別、成員和程式集* 。 程式宣告型別,而型別則包含成員,並被整理到命名空間中。 型別示例包括類、結構和介面。 成員示例包括字段、方法、屬性和事件。 編譯完的 c# 程式實際上會打包到程式集中。 程式集的副檔名通常為 .exe 或 .dll,具體視其分別實現的是應用程式還是庫_***而定。
c# 程式可以儲存在多個原始檔中。 在編譯 c# 程式時,將同時處理所有原始檔,並且原始檔可以自由地相互引用。 從概念上講,就好像所有原始檔在被處理之前都連線到乙個大檔案。 在 c# 中永遠都不需要使用前向宣告,因為宣告順序無關緊要(極少數例外情況除外)。 c# 並不限制原始檔只能宣告一種公共型別,也不要求原始檔的檔名必須與其中宣告的型別相匹配。
型別安全指的是資料例項只能夠按照定義好的方式相互作用。它保證了資料內部資訊的完整性。
c# 支援靜態型別。這意味著這些資料的型別在編譯階段就被確定,並且不可更改。因此許多關於型別的錯誤能夠在編譯階段被發現。
c# 也可以通過 dynamic 關鍵字來支援動態型別,這個型別依然會在編譯階段被確定。
c# 是乙個強型別的語言,這就是說你不能將乙個 int 型別的變數傳給乙個引數是 string 型別的函式。
c# 提供自動的記憶體管理機制,編譯器會將乙個垃圾**器( garbage collection )作為程式的一部分一起執行。
垃圾**器會自動**那些不再被需要的記憶體。一段記憶體被判定為不再被需要的標準時,這段記憶體沒有被活躍的引用變數指向。
C語言筆記(一)
資料型別意味著 儲存的物件不同,使用的記憶體空間不同,為了更有效的利用記憶體空間。做開發的時候首先考慮的是記憶體的節省。int a a是有值的 printf a d a d轉譯符 獲取四個位元組 c 獲取乙個位元組 字元型 char 如果 d,a 會造成記憶體浪費,程式崩潰 資料型別不匹配!char...
c語言複習筆記一
1 解釋語言與編譯語言,語言本身沒有這些分別,只是我們常用的到執行的這種型別 python是解釋型語言,不需要編譯 解釋就是借助乙個程式,那個程式能夠理解我的程式,並按照要求執行 c語言是編譯型語言 原始檔.c 預處理程式 cpp 得到.i 編譯程式 ccl 得到.s彙編原始檔 匯程式設計序得到.o...
自學C語言筆記一
這是中國大學mooc浙江大學 程式設計入門 c語言 的練習題目集的第i階段,包含變數 語句 迴圈部分的題目,不包括陣列 結構 基礎演算法的題目。1.對於輸入的兩個整數,按照要求輸出其和差積商。輸入格式 在一行內輸入兩個不超過100的非負整數a和b,中間以乙個空格間隔,且保證b不為0。輸出格式 共四行...