6

次のような名前空間がある場合:

namespace MyApp.Providers
 {
    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Globalization;
  }

これは、同じ名前空間を持つ他のファイルやクラスを作成すると、using ステートメントが共有され、それらを再度含める必要がないということですか?

はいの場合、これは管理上の頭痛の種ではありませんか?

4

6 に答える 6

11

いいえ、ファイル内の名前空間セクションにのみ適しています。名前空間内のすべてのファイルではありません。

using ステートメントを名前空間の外に置くと、名前空間に関係なくファイル全体に適用されます。

また、外側のスコープに移動する前に、まず名前空間内の Usings を検索します。

于 2009-07-20T22:04:28.713 に答える
2

クラスを使用する各ファイルで、修飾なしで参照するすべてのクラスに using ディレクティブを指定する必要があります。

参考

using ディレクティブのスコープは、ディレクティブが表示されるファイルに限定されます。

于 2009-07-20T22:05:53.813 に答える
0

Usings は現在のファイルにのみ適用されます。それらが名前空間宣言の内側にあるか外側にあるかは、わずかな違いにすぎません。

タイプの検索順序は次のとおりです。

  1. 最も内側の名前空間宣言から開始
  2. 現在の名前空間を調べる
  3. 現在の名前空間の使用法を調べます
  4. 親名前空間の宣言まで進み、手順 2 から繰り返します。

その結果、このプログラムは正常にコンパイルされます。

namespace MyProject.Main {
    using System;

    class Program {
        public static void Main(string[] args) {
            Console.WriteLine("Hello, World!");
        }
    }
}

// in another file:
namespace MyProject.Console {
    class Test {}
}

ただし、using System;を一番上に移動すると、コンパイルは失敗します (MyProject.Console.WriteLine は存在しません)。

于 2009-07-20T23:14:46.730 に答える
0

いいえ、そうではありません。

namespace宣言の外では、グローバル名前空間にいるという事実を考慮してください。usingソース ファイルのその領域のステートメントは、他のソース ファイルのグローバル名前空間に影響しますか?

于 2009-07-20T22:03:21.837 に答える
0

いいえ。部分クラスを除くすべてのクラスに名前空間を含める必要があります。

1 つの補足: 名前空間内に using ステートメントを配置するという非常に優れたプラクティスを行っています。これは非常に優れた構文です。

良い仕事を続けてください。

于 2009-07-20T22:04:13.753 に答える
0

using ステートメントは、それらが表示されるコード ファイルに対して有効ですが、少しひねりがあります。using ステートメントを名前空間に配置すると、それらはその名前空間のスコープに制限されますが、同じコード ファイル内に限られます。

于 2009-07-20T22:05:24.813 に答える