web-dev-qa-db-ja.com

.NETのモジュールとは何ですか?

モジュールとは正確には何ですか?モジュール、クラス、関数の違いは何ですか? C#でモジュールにアクセスするにはどうすればよいですか?

実行時に(コード署名を使用せずに)特定の関数のみのILコードのチェックサムを計算するため、これを求めています。

51
Pushkar

モジュールは、アセンブリ内のコードの論理的なコレクションです。アセンブリ内に複数のモジュールを含めることができ、各モジュールは異なる.NET言語で記述できます(VSは、私の知る限り、マルチモジュールアセンブリの作成をサポートしていません)。

アセンブリにはモジュールが含まれます。モジュールにはクラスが含まれます。クラスには関数が含まれています。

はい、アセンブリ、モジュール、クラス、関数、プロパティ、フィールドなどにすべて実行時にリフレクションを介してアクセスできます。

52
OJ.

他の答えへの追加として:

MSDNは、「モジュールは、アセンブリマニフェストを持たないMicrosoft中間言語(MSIL)ファイルです」と述べています。

アセンブリリンカー(al.exe)ユーティリティを使用してアセンブリマニフェストを生成することにより、モジュールを「リンク」できます。正しく覚えていれば、CLRはアセンブリの個々のモジュールをロードできるため、必要なモジュールのみがロードされます。

編集:Netmodulesの より良い説明 と、それらが必要な理由を見つけました。

別の question がありますSOチェックサムサブジェクトに触れます。答えは、ILを取得するためにGetILAsByteArrayメソッドを使用することについて言及しています。

10
PHeiberg

ファイル

それがモジュールです。

module: A single file containing content that can be executed by the VES

VESは.NETアセンブリを読み取り、それをマシンコードに変換するプログラムです。) http://www.ecma-international.org/publications/files/ECMA-ST/ECMAを参照してください。 -335.pdf パーティションIページ16。

-

アセンブリは、ファイルシステム(モジュール)内のファイルの一貫したコレクションです。 http://msdn.Microsoft.com/en-us/library/zst29sk2(vs.71).aspx を参照してください

明らかに、クラス定義はファイル(モジュール)itelf内で定義されます。

5
Alexander Bird

VB "module"ステートメントもあります。これは、アセンブリやコンパイルに関連せず、C#静的クラスに似ています。

https://docs.Microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/module-statement

Moduleステートメントは、名前空間全体で使用可能な参照型を定義します。モジュール(標準モジュールと呼ばれることもあります)はクラスに似ていますが、いくつかの重要な違いがあります。すべてのモジュールにはインスタンスが1つだけあり、変数を作成したり変数に割り当てる必要はありません。モジュールは継承をサポートせず、インターフェイスを実装しません。モジュールは、クラスや構造の意味では型ではありません。モジュールのデータ型を持つようにプログラミング要素を宣言することはできません。

モジュールは名前空間レベルでのみ使用できます。つまり、モジュールの宣言コンテキストはソースファイルまたは名前空間でなければならず、クラス、構造、モジュール、インターフェイス、プロシージャ、またはブロックにすることはできません。モジュールを別のモジュールまたは任意のタイプ内にネストすることはできません。詳細については、宣言コンテキストとデフォルトのアクセスレベルを参照してください。

モジュールの有効期間は、プログラムと同じです。メンバーはすべて共有されているため、プログラムのライフタイムと同じライフタイムもあります。

モジュールはデフォルトでフレンドアクセスになります。アクセス修飾子を使用して、アクセスレベルを調整できます。詳細については、Visual Basicのアクセスレベルを参照してください。

モジュールのすべてのメンバーは暗黙的に共有されます。

VBの短いモジュールでは、C#静的クラスの類似物です

1
SENya