2012-02-25 5 views

答えて

16

の違いは、それは「グローバル」名前空間何される - それは考慮に他のusingディレクティブを取ることなく名前を探すために、コンパイラを強制的に。たとえば、あなたが持っていたとします

public class Bar{} 

namespace Foo 
{ 
    public class Bar {} 

    public class Test 
    { 
     static void Main() 
     { 
      Bar bar1 = null; // Refers to Foo.Bar 
      global::Bar bar2 = null; // Refers to the "top level" Bar 
     } 
    } 
} 

は、基本的には名前の衝突を回避する方法です - あなたはツールが必ずしも内の他のすべてのタイプを知らないツールによって生成されたコード、でそれを見ることが最も可能性が高いですシステム。手作業で書かれたコードでそれを必要とすることはめったにありません。

:: namespace qualifierとともに、より多くの詳細については、MSDNで"How to: Use the global namespace alias"を参照してください。

+1

.edmxファイルからコードを生成しようとすると、これは、マイクロソフトのエンティティフレームワークによって生成されます。ありがとうございます – user1010572

5

これは、グローバル名前空間の別名です。あなたのコードベースでSystem.Int32と呼ばれる型を宣言した場合

は、あなたがこのエイリアスを使用して.NETの一つに組み込まれて区別することができます。

// your code 
namespace System 
{ 
    public class Int32 
    { 
    } 
} 

// You could reference the BCL System.Int32 like this: 
global::System.Int32 bclInt; 
System.Int32 myInt; 

MSDNのHow to: Use the Global Namespace Alias (C# Programming Guide)を参照してください。

+0

あなたの 'Int32'は' global :: System.Int32'です:あなたの 'System'名前空間はネストされていません。また、名前空間には可視性がありません。 – hvd

+0

@hvd:もちろん、名前空間には可視性があります。 * hidden *である可能性があるため* visible *を持たなければなりません。* hidden *名前空間は定義上*可視ではありません*。たぶんあなたは名前空間に*アクセシビリティ*がないと言っていたと思いますが、それは名前空間のアクセシビリティを特徴づける奇妙な方法です。それを考える良い方法は、すべての名前空間が一般公開されていることです*。 –

+0

@EricLippert私は隠された名前空間について聞いたことがないと認めます。それを見てみましょう:内部クラスだけを含む外部アセンブリ内の名前空間を参照していますか?そうであれば、Visual StudioとC#コンパイラは、表示されているかどうかについて意見を異にします。「using System.Data.Entity.Internal;」にはエラーとして下線が引かれますが、コンパイラによって受け入れられます。私は仕様が何を言っているのか分からない。 – hvd

2

グローバル名前空間を参照するために使用されます。既に他の場所に存在する名前空間にコードを記述する場合に便利です。

は、より多くの情報のためにこれを参照してください:そうですねhttp://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx

関連する問題