1

私はチームコードのレビューを受けていました。私は彼らがクラスの上部ClassAに書くことによってクラスを使用していたことを観察します。また、クラスby をusing AAA.BBB;使用したこともあります。2 つの基本的な質問があります。ClassBAAA.BBB.ClassB

  1. 上記のシナリオの使用中にパフォーマンスの問題はありますか? 推奨事項
  2. 名前空間を宣言すると; その名前空間のすべてのクラスがロードされるかどうか。

ここで助けてください。ありがとう。

4

3 に答える 3

2

できる限りこれらに答えます。手元に情報源はありません。経験だけです(誰かがそれを手伝ってくれるかもしれません)。

  1. 名前空間を直接呼び出す場合と比較して、名前空間をインポートする場合のパフォーマンスの問題はありません。コンパイラがそれを実行するとき、最終的には常に完全修飾されていると考えることができます。名前空間の using ステートメントは、開発者を支援するためのものであるため、毎回完全に修飾する必要はありません。実際、あなたのClassB例では、同じクラス名を定義する複数の名前空間と衝突している可能性があります。たとえば、Calendarクラスは と の両方にSystem.GlobalizationあるSystem.Web.UIため、それらを使用するときはどちらか一方を完全に修飾する必要があります。

  2. 通常、すべてのコードは、その下にあるプロジェクトによってアセンブリにコンパイルされます。アセンブリ内のコードを参照すると、関連するすべてのコードが読み込まれます。ただし、実際に呼び出されるまで、コードは必ずしも JIT で使用するためにコンパイルされるとは限らないことに注意してください。

于 2013-10-10T04:04:20.020 に答える
1

名前空間は、(名前の衝突を防ぎながら) コードを整理するためのものです。それらはパフォーマンスにはまったく関係ありません。

于 2013-10-10T04:01:30.257 に答える
1

コード内の完全修飾名は、気が散りうるさいです。私はそれらを決して持たないことを好みます。名前空間の競合がある場合は、エイリアスを使用して解決できます。

異なる名前空間で定義された 2 つのクラスが存在するという競合がある場合にのみ使用します。その場合でも、using を使用してそれらを区別します。

using MyClassB=AAA.BBB.ClassB;
//  :
var myClassB= new MyNS();

パフォーマンスに関しては、ここで答えを見ることができます:

using ディレクティブは、コンパイル中に消えるシンタックス シュガーにすぎません。名前空間が完全修飾型名を使用して含まれているか、または言及されているかどうかは、結果のバイトコードにはまったく関係ありません。したがって、どちらを使用しても実行時のパフォーマンスは向上しません。

于 2013-10-10T04:02:38.040 に答える