2009-07-20 6 views
5

私のような名前空間を持っている場合:名前空間とusingディレクティブ

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

が、これは私が同じ名前空間を持つ他のファイルとクラスを作成する場合は、usingステートメントが共有されていることを意味しています、と私はする必要はありませんそれらをもう一度含める?

「はい」の場合、これは管理上の頭痛のビットですか?

+1

詳細はこちら:http://stackoverflow.com/questions/125319/should-usings-be-inside-or-outside-the-namespace – alexandrul

+1

これは命令であり、ステートメントではありません。 ['usingステートメント](http://msdn.microsoft.com/en-us/library/yh598w02.aspx)は完全に別のものです。 –

答えて

10

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

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

また、外側のスコープに行く前に、ネームスペース内のUsingsも最初に検索します。

+0

良い!これは意味をなさない。お気軽にご連絡ください... –

+1

usingステートメントをファイルの外側にどのように置いていますか? –

+0

申し訳ありませんが、タイプミス。名前空間の外で言いたいこと。 – Brandon

0

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

namespace宣言の外に、あなたはグローバル名前空間にあるという事実を考えてみましょう。ソースファイルのその領域のusing文は、他のソースファイル内のグローバル名前空間に影響しますか?

0

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

ワンサイドノート:あなたが名前空間内で使用してステートメントを置くのは非常に良い練習をやっています。それは非常に良い構文です。

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

+2

なぜusingステートメントを名前空間宣言の中に置くのがよいですか? –

+4

なぜあなたはそれを行う*非常に*良い習慣と思うのだろうか?各クラスを別々のファイルに入れるという良い方法に従えば、 'using'ステートメントをファイルの先頭か' namespace'ブロックの先頭に置いてもほとんど違いはありません。 –

+0

Earwicker - 本当にありがとうございます!これが私が最初に混乱していた理由です! –

0

usingステートメントは、コードファイルが表示されている場合に有効です。使用するステートメントの名前空間に入れると、その名前空間のスコープに制限されますが、同じコードファイル内にしか存在しません。

2

あなたは、あなたがそれらを使用する各ファイルに資格なしで参照する任意のクラスのためのusingディレクティブを指定する必要があります。

Reference

usingディレクティブのスコープは内それ 表示されるファイルに制限 です。

0

Usingsは、現在のファイルに適用されます。彼らは名前空間宣言は、わずかな違いが内側または外側にしているかどうか、次のように

種類のルックアップ順序は次のとおりです。最も内側の名前空間宣言で

  1. 開始
  2. 現在の名前空間で見
  3. は、親の名前空間宣言に上がると、ステップ2
から繰り返して現在の名前空間のusingsで
  • 外観(MyProject.Console.WriteLineが存在しない)

    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;を移動する場合は、コンパイルは失敗します。その結果

    、このプログラムはうまくコンパイルされます。