這本書講解C#語言十分詳細,我將其中的重要內容整理成條款,以備忘。
1.
.NET
由三部分組成:
CLR
,編碼工具和
BCL
。
CLR
負責記憶體管理、代碼安全驗證、代碼執行、垃圾收集。
.NET
提供平台叫用(
P/Invoke
)
,
允許調用
Windows API
,而且還可以和
COM
進行互動操作。
2.
.NET
開發人員可以不必瞭解
COM
的知識,無需考慮諸如
IUnknown
介面,類型庫,引用計數,註冊表以及
HRESULT(COM
使用
HRESULT)
資料類型返回執行階段錯誤代碼,而
.NET
不使用
HRESULT
,因為所有的執行階段錯誤都會產生異常。
3.
.NET
語言的編譯器接受原始碼檔案,輸出檔案為程式集。程式集中的代碼並不是本地代碼,而是
CIL
。程式集中包含
CIL
,程式集中使用的類型的中繼資料以及對其他程式集引用的中繼資料。
4.
CLR
在運行時首先檢查程式集的安全特性,然後在記憶體中分配空間,再把程式集中被調用到的
代碼送進
JIT
。程式集中的
CIL
只有在被調用到時才會被
JIT
編譯成本地代碼,然後就被緩衝起來以備在後來的程式中執行,即不被調用的代碼不會被編譯成本地代碼,而且被調用到的代碼只被編譯一次。一旦
CIL
被編譯成本地代碼,
CLR
就會在運行時進行管理,如:釋放記憶體、檢查數組邊界、檢查參數類型、管理異常等。
5.
運行在
CLR
,並且在運行時受
CLR
控制的代碼叫做Managed 程式碼,反之為Unmanaged 程式碼。
6.
CLI(
通用語言基礎結構
)
是一組闡述了系統的架構、規則和約定的規範
。包含
CTS:
定義了一組豐富的內建類型,定義了每種類型確定的詳細的特性
,
而且所有支援
.NET
的語言提供的類型通常會映射到
CTS
中已定義的內建類型集的某一個特殊子集;
CLS
:詳細說明了支援
.NET
語言的規則、屬性和行為,其主題包括資料類型、類結構和參數傳遞。
7.
任何以
.NET
平台作為目標的語言必須建立它的資料類型與
CTS
的類型間的映射。所有
.NET
語言共用這一類型系統,實現他們之間無縫的互操作,這個方案提供了語言之間的繼承性。
8.
由於
CLS
是
CTS
的子集
,
這意味著一種語言特徵可能符合
CTS
標準,但卻超過了
CLS
的規範,如:
C#
支援無符號數字類型,該特徵能通過
CTS
測試,但
CLS
卻僅僅識別有符號數字類型。因此,如果使用者在一個組件類使用
C#
的無符號類型,就可能無法與不支援無符號類型的語言(如
VB.NET
)設計的組件實現互操作,但並非不可能,實際上,使用者能夠安全實現含有
private
成員的組件,
CLS
相容性問題。但如果使用者需要
.NET
語言的互通性,那麼使用者的組件中的
public
成員必須完全符合
CLS
規範。
9.
@
字元只能放在標識符的首位,標識符的命名風格有兩種:
Pascal
風格,如:
CarDeck
,建議用於類型名和成員名;
Camel
風格,如:
totalCycleCount
,建議用於本地變數和方法參數。
10.
兩個公用約定:欄位
名稱使用底線開頭:
example
或使用
m_
開頭:
m_example
。
11.
在
C#
中,可以使用任意的預留位置和任意數量的值,值可以以任何順序使用,值可以在格式字串中替換任意次。例如:
Console.WriteLine(”Three integers are {1}, {0}, {1}.”, 3, 6);
輸出為
Three
integers are 6, 3,6.
12.
預留位置不能引用值列表以外位置
的值,如果這樣做了,不會產生編譯錯誤,但會產生執行階段錯誤
(
異常
)
。