2016-08-12 30 views
3

我學習各種原因CIL,它似乎是類通常被定義類似於:在CIL中做什麼「auto」,「ansi」和「cil managed」?

.class public auto ansi beforefieldinit [...] extends [mscorlib]System.Object 

和功能定義爲:

.method [...] (args) cil managed 

我明白了一切,但我可​​以」 t似乎找出「auto」或「ansi」或「cil managed」做了什麼。對於我來說,關鍵字也太模糊,以至於無法獲得特定的搜索結果(beforefieldinit幾乎立即出現)。

回答

4

ECMA-335提供你所尋求的信息,

II.10.1 Type頭(ClassHeader),你會發現:

汽車 - 場的佈局自動提供。 - §II.10.1.2

ansi - 將字符串統一爲ANSI。 - §II.10.1.5

塞爾Lidin,在他的書中寫道:.Net IL Assembler在第1章類聲明下:

在這方面的關鍵字自動定義類佈局樣式(自動,預設),指導裝載者佈置這個班,但它看起來合適。替代方法是順序的(保留指定的字段順序)和顯式的(明確指定每個字段的偏移量,給出加載程序確定類的精確說明)。關鍵字ansi在與非託管代碼互操作時定義類內字符串轉換的模式。默認情況下,此關鍵字指定將字符串轉換爲「普通」C字節字符串的字符串。備用關鍵字是unicode(字符串轉換爲UTF-16 Unicode和從UTF-16轉換而來)和autochar(底層平臺決定了字符串轉換的模式)。


II.23.1。11個標誌的方法[MethodImplAttributes]你可以閱讀:

IL - 爲0x0000 - 法IMPL是CIL

管理 - 爲0x0000 - 方法實現了一套被管理

塞爾Lidin,描述了這方法聲明中的第1章:

關鍵字cil和managed定義了MethodDef的所謂實現標誌,並指出m方法主體以IL表示。本地代碼而不是IL中表示的方法將攜帶實現標誌本地非託管。


我建議你得到一本關於這個話題,有幾個我認爲。它的速度比ECMA-335規格要快得多。

0

來自ECMA CLI:

ansi將字符串作爲ANSI統一到平臺。 §II.10.1.5

auto自動提供字段佈局。 §II.10.1.2

beforefieldinit無需在調用靜態方法之前初始化類型爲 。 §II.10.1.6

關於'cil managed',這個方法atrribute表明這個nethod包含了IL,並且它的所有代碼都被管理了。