2011-02-21 9 views
3

をインポートするディレクティブを使用して:私はこのような名前空間をインポートする場合は副名前

using System; 

は、なぜ私はこのようなサブ名前空間IOにアクセスすることはできません。

IO.FileInfo fi; 

Insted私は全体のパスのいずれかを記述する必要があります。

System.IO.FileInfo fi; 

または名前空間

せずに全体のIO名前空間と使用するクラスをインポートします
using System.IO; 

FileInfo fi; 

ここに何か不足していますか?

+1

VB。ネットはこれを行います。 C#はそうではありません。 – SLaks

答えて

5

それは「名前空間」と「サブ名前空間」の観点で考えることが多いが便利ですが、現実には、唯一のタイプ名があります。この場合

、単一のタイプがあります:System.IO.FileInfo

usingディレクティブは、コンパイラが、それはマッチング型の名前を見つけたかどうかを確認するために、あらゆるタイプにSystem.を追加することができますが。ただし、FileInfoネストタイプを含むIOタイプを検索するので、IO.FileInfoは見つかりません。

言語がどのように設計されているかは、もっと面倒かもしれませんが、usingディレクティブで定義されている名前空間内の型のみを検索するため、ネストされた型名と名前空間名の混乱が解消されます。これにより、型名の衝突の可能性が減ります。コンテキストタイプは例えば、同じ名前空間の階層にある場合にのみ行うようにしようとしている何

2

C#では実際にサブネームスペースの概念はありません。名前空間名のピリオドは、論理的な組織目的のためだけにあります。

SystemSystem.IOは、C#に関する限り、2つの異なる名前空間です。

あなたはちょうどあなたがこれを行うことがFileInfoクラスが必要な場合:

using FileInfo = System.IO.FileInfo; 
0

は動作します:

namespace System { 
    class MyClass { 
    IO.FileInfo fi; 
    } 
} 

あなたはこのように、相対的な輸入をも持つことができます。

namespace System { 
    using IO; 
} 
関連する問題