2012-09-28 10 views
11

スタイルコードを適切に使用している古いコードを取得しようとしていました。 usingステートメントを内部に置くように要求します。それは1つを除いてすべてのためによく を働いた。私は以下のコードに問題を減らしました。名前空間内でのステートメントの使用が失敗する

namespace B.C 
{ 
    using System; 

    public class Hidden 
    { 
     public void SayHello() 
     { 
      Console.WriteLine("Hello"); 
     } 
    } 
} 

namespace A.B.C 
{ 
    using B.C; 

    public class Program 
    { 
     static void Main(string[] args) 
     { 
      new Hidden().SayHello(); 
     } 
    } 
} 

これはコンパイルエラーエラー

「型または名前空間名 『hidden』が見つかりませんでした(あなたがusingディレクティブまたはアセンブリ参照が不足している?)」になります。

B.30Cを使用してを移動すると、が名前空間A.B.Cよりも上にあれば、正しく構築されます。 Hiddenクラスは異なるチームによって開発されており、変更することはできません。

+2

名前空間 'A.B.C'スコープで' B.C'名前空間が誤って 'A.B.C'と評価されるのでしょうか?グローバルスコープで名前空間について知らない場合、 'B'はまず' A'( 'A.B')の' B'であると仮定しません。 –

答えて

15

名前空間Aの中にあるので、B.Cは実際にはA.B.Cになります。

使用global::あなたがルートから見ていることを指定するには:

using global::B.C; 
+0

+1完璧..... – Habib

+0

+1良い説明 –

+2

これは、usingステートメントだけでなく、ネームスペースの地獄をエスケープするためにあらゆる場所で動作することにも注目する価値があります。 (例えば、 'new global :: MyNS.BlahBlah()') –

2

B.CはA.B.C.と競合してあなたはB.Cの名前を別のものに変更するか、またはそれを指定する必要がありますglobal

関連する問題