コンパイラが定数値をアセンブリメタデータに格納するのはなぜですか?それらは、アセンブリメタデータから中間言語コードに直接埋め込まれていますか?
コンパイラが定数値をアセンブリメタデータに格納するのはなぜですか?それらは、アセンブリメタデータから中間言語コードに直接埋め込まれていますか?
回答:
2つのアセンブリを混同すると思います。
定数は、それが定義されているアセンブリのメタデータにのみ保存されます。メタデータには、アセンブリ内のすべてのタイプとメンバーに関する情報が含まれ、定数はメンバーです。
定数に関する情報は、それが使用されるアセンブリには保存されません。定数値または文字列をソースに直接書き込んだ場合と同様に、定数値はILで直接使用されます。
例:私のアプリケーションの1つは、データベーステーブルとフィールドを識別するために多くの定数を使用しています。すべての定数のみを含む1つのアセンブリがあります。
アプリケーションをビルドするときに、Visual Studioの「定数」アセンブリへの参照を追加します。アセンブリには定数のみが含まれているため、アプリケーションではそのアセンブリへの参照はなく、実行時に「定数」アセンブリは必要ありません。
定数はコンパイル時に認識され、アセンブリのメタデータに格納されます。つまり、定義できるのはプリミティブ型の定数のみです。
はい、メタデータから直接読み込まれます。実行時にメモリが割り当てられることはありません。