私はチームコードのレビューを受けていました。私は彼らがクラスの上部ClassA
に書くことによってクラスを使用していたことを観察します。また、クラスby をusing AAA.BBB;
使用したこともあります。2 つの基本的な質問があります。ClassB
AAA.BBB.ClassB
- 上記のシナリオの使用中にパフォーマンスの問題はありますか? 推奨事項
- 名前空間を宣言すると; その名前空間のすべてのクラスがロードされるかどうか。
ここで助けてください。ありがとう。
できる限りこれらに答えます。手元に情報源はありません。経験だけです(誰かがそれを手伝ってくれるかもしれません)。
名前空間を直接呼び出す場合と比較して、名前空間をインポートする場合のパフォーマンスの問題はありません。コンパイラがそれを実行するとき、最終的には常に完全修飾されていると考えることができます。名前空間の using ステートメントは、開発者を支援するためのものであるため、毎回完全に修飾する必要はありません。実際、あなたのClassB
例では、同じクラス名を定義する複数の名前空間と衝突している可能性があります。たとえば、Calendar
クラスは と の両方にSystem.Globalization
あるSystem.Web.UI
ため、それらを使用するときはどちらか一方を完全に修飾する必要があります。
通常、すべてのコードは、その下にあるプロジェクトによってアセンブリにコンパイルされます。アセンブリ内のコードを参照すると、関連するすべてのコードが読み込まれます。ただし、実際に呼び出されるまで、コードは必ずしも JIT で使用するためにコンパイルされるとは限らないことに注意してください。
名前空間は、(名前の衝突を防ぎながら) コードを整理するためのものです。それらはパフォーマンスにはまったく関係ありません。
コード内の完全修飾名は、気が散りうるさいです。私はそれらを決して持たないことを好みます。名前空間の競合がある場合は、エイリアスを使用して解決できます。
異なる名前空間で定義された 2 つのクラスが存在するという競合がある場合にのみ使用します。その場合でも、using を使用してそれらを区別します。
using MyClassB=AAA.BBB.ClassB;
// :
var myClassB= new MyNS();
パフォーマンスに関しては、ここで答えを見ることができます:
using ディレクティブは、コンパイル中に消えるシンタックス シュガーにすぎません。名前空間が完全修飾型名を使用して含まれているか、または言及されているかどうかは、結果のバイトコードにはまったく関係ありません。したがって、どちらを使用しても実行時のパフォーマンスは向上しません。