2016-08-12 9 views
3

私はさまざまな理由でCILを学んだし、に類似したクラスは、多くの場合、定義されているようだ。「私は他のすべてを理解しますが、私ができるCILでは「auto」、「ansi」、「cil managed」は何をしますか?

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

として定義
.class public auto ansi beforefieldinit [...] extends [mscorlib]System.Object 

と機能どのような "auto"や "ansi"や "cil managed"が何をしているかを見ているようです。キーワードはあまりにもあいまいで、特定の検索結果を得ることができません(beforefieldinitがほぼ即時に表示されました)。

答えて

4

ECMA-335を使用して、見つける

下II.10.1タイプヘッダ(ClassHeader)、あなたが求める情報を提供する:

自動 - フィールドのレイアウトが自動的に提供されます。 - §II.10.1.2

ansi - ANSIとしてのプラットフォームへのマーシャル文字列。 - 彼の本.Net IL Assemblerで§II.10.1.5

セルジュLidin、クラス宣言の下の第1章に書いている:

この文脈でのキーワード自動クラスのレイアウトスタイル(自動、デフォルトを定義します)、このクラスをレイアウトするようにローダーに指示しますが、フィット感があります。代替はシーケンシャル(フィールドの指定されたシーケンスを保持する)と明示的(各フィールドのオフセットを明示的に指定し、クラスをレイアウトするための正確な指示をローダーに与える)です。キーワードansiは、アンマネージコードと相互運用するときにクラス内の文字列変換モードを定義します。このキーワード(デフォルト)は、文字列が「通常の」Cスタイルのバイト文字列に変換されることを指定します。代わりのキーワードは、Unicode(文字列はUTF-16 Unicodeに変換され、UTF-16 Unicodeに変換されます)およびautochar(基底プラットフォームは文字列変換のモードを決定します)です。 II.23.1下


。方法のための11個のフラグは[MethodImplAttributes]あなたが読むことができます:

IL - 0000 - 0000 - - メソッドの独自の実装がCIL

管理されているメソッドの独自の実装は、セルジュLidin

を管理でこれを説明しているが第1章メソッド宣言の下:

キーワードcilとmanagedは、MethodDefの実装フラグを定義しており、mエトド体はILで表される。 ILではなくネイティブコードで表されるメソッドは、実装フラグをネイティブのアンマネージにします。


私はこのトピックに関する本を入手することをお勧めいたします、私は考えていくつかがあります。 ECMA-335仕様を掘り起こすよりもはるかに高速です。

0

ECMA CLIから:

ansi ANSIとしてのプラットフォームへのマーシャリング文字列。 §II.10.1.5

自動フィールドのレイアウトが自動的に提供されます。 §II.10.1.2

beforefieldinit staticメソッドが呼び出される前に型を初期化する必要はありません。 が呼び出されます。 §II.10.1.6

「cil managed」について、このメソッド属性は、メソッドにILが含まれ、そのコードがすべて管理されていることを示します。

関連する問題