2011-02-21 7 views
3

Если я импортировать пространство имен, как это:с помощью директивы импорта subnamespaces

using System; 

Почему я не могу получить доступ к подпространстве имен IO, как это:

IO.FileInfo fi; 

Insted я должен написать либо полный путь:

System.IO.FileInfo fi; 

или импортировать весь IO пространство имен и использовать класс без имен

using System.IO; 

FileInfo fi; 

Я что-то упустил?

+1

VB. Net делает это; C# нет. – SLaks

ответ

5

Хотя это часто бывает удобно думать в терминах «пространств имен» и «суб-пространств имен», на самом деле, есть только имена типов ,

В этом случае, есть один тип: System.IO.FileInfo

с помощью директивы позволяет компилятору добавить System. любого типа, чтобы увидеть, если он находит имя типа соответствия. Однако это не найдет IO.FileInfo, так как он будет искать тип IO, содержащий вложенный тип FileInfo.

Способ, которым язык программирования может казаться более громоздким, но он устраняет путаницу вложенных имен типов и имен пространства имен, поскольку он ищет только типы в пространствах имен, определенных в директивах использования. Это уменьшает вероятность столкновений имен типов.

2

C# на самом деле не имеет понятия подпространств. Периоды в имени пространства имен существуют только для целей логической организации.

System и System.IO - это два разных пространства имен до C#.

Если вам просто нужно FileInfo класс, который вы могли бы сделать это:

using FileInfo = System.IO.FileInfo; 
0

То, что вы пытаетесь сделать, только работает, если тип контекста в той же иерархии пространств имен, например:

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

Вы также можете иметь относительно импорта, как это:

namespace System { 
    using IO; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^