プログラムで多数の名前空間が使用されている場合、実行時に何が起こりますか?名前空間のクラスが完全にロードされていますか、それともプログラムで使用されているクラスがロードされていますか?プログラムに未使用の名前空間が存在する場合はどうなりますか?
2 に答える
名前空間は、実際には、実行時の構成というよりもコンパイル時の構成です。クラスを名前空間に入れることは、主にクラスの名前にのみ影響します。クラスの「完全修飾名」は、実際にはその名前空間階層(ピリオドで区切られて.
いる)の後に実際のクラス名が続きます。実行時に名前空間を「ロード」するのではなく、概念全体が存在するわけではありません。
プログラムをコンパイルするときに、ライブラリ(.dll)にコンパイルすると、その.dllへの参照を追加できます。この場合、そのdll内のすべてのクラスがプログラム内で「accessibe」になります。ロードされるかどうかについては、ロードされる可能性は確かにありますが、初期化が遅れているため、未使用のクラスがパフォーマンスに大きな影響を与えることはありません。
名前空間のファイルの先頭にステートメントを追加してもusing
、その名前空間は「ロード」されません。これは、コンパイラーによって、すべての「修飾されていない」クラス名を「完全に修飾された」クラス名に解決するために使用されます(コンパイル時に)。そもそも完全修飾クラス名だけを使用した場合は、sは必要ありません(using
ただし、コードが煩雑になるため、とにかく追加する必要があります)。
名前空間はいくつでも作成できuse
ます。名前空間はクラスをロードしません。path
名前空間は、変数のような便利な機能と考えてください。名前空間を使用しない場合は、次のようなコードを作成することになります。
System.Collections.Generic.List<string> myList =
new System.Collections.Generic.List<string>();
これにより、コードの記述が非常に言葉になり、短い順序で面倒になります。名前空間によってusing
、コードを次のように短縮できます。
using System.Collections.Generic;
// ..... further down in code:
List<string> myList = new List<string>();
次の2つのリンクは、名前空間の理解を深めるのに役立つ可能性があります。
http://msdn.microsoft.com/en-us/library/sf0df423%28v=vs.80%29.aspx
http://msdn.microsoft.com/en-us/library/0d941h9d%28v=vs.80%29.aspx
結論:namespaces
プロジェクト内のクラスの可視性の範囲を整理および制御するのに役立ちます。
HTH..。