2016-02-25 17 views
5

Mono.Cecilを使用して、Regex.CompileToAssembly()で生成されたアセンブリを読み取っています。型を反復処理すると、ルート名前空間には<Module>という名前の型が1つあります。型には基本型がありません。このタイプは何ですか?これはMono.Cecilアーティファクトなのか、それとも.NETアセンブリの実際の部分なのでしょうか?それはどのような役割を果たしますか?「<Module>」タイプとは何ですか?

答えて

7

<Module>タイプは、CLIモデルに適合しない宣言のプレースホルダです。通常、管理モードで書かれたコードだけでなく、CやC++のような管理されていないコードの両方を含む、混在モードのアセンブリにのみ関係します。純粋に管理されたアセンブリでは空です。

これらの言語は、フリー関数とグローバル変数をサポートしています。 CLRは直接サポートしていません。メソッドと変数は常に型のメンバーでなければなりません。したがって、メタデータジェネレータは簡単なトリックを使用しますが、そのような関数や変数の拠点となる偽の型を作成します。その偽のタイプの名前は<Module>です。メンバーを非表示にするには、常に内部アクセシビリティが必要です。これらのタイプのうちの1つだけが存在し、そのRIDは常に1です。

CLRソースコードは、それを「グローバルクラス」と呼びます。

関連する問題