Пространства имен

Это способ, используемый в .NET, который позволяет создавать контейнеры для кода приложений, чтобы и код, и его составные части были однозначно идентифицированы.

Код С# по умолчанию содержится в глобальном пространстве имен.Это означает, что к объектам в коде С# можно обратиться из любого другого кода в глобальном пространстве имен просто по их имени. Можно воспользоваться ключевым словом namespace для того, чтобы явно задать пространство имен для любого блока кода, заключенного в фигурные скобки. Имена, находящиеся в таком пространстве имен, если к ним обращаются не из данного пространства имен, должны квалифицироваться.

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

Например:

Namespace LevelOne

{

//программа, находящаяся в пространстве имен LevelOne

// в ней описывается имя "NameOn''

}

// программа, находящаяся в глобальном пространстве имен

 

В этой программе описывается единственное пространство имен — LevelOne.

Внутри любого пространства имен мы можем описывать вложенные пространства имен, используя то же самое ключевое слово namespace. При обращение к вложенным пространствам имен следует указывать всю их иерархию, отделяя один уровень иерархии от другого с помощью точки. Это лучше всего проиллюстрировать с помощью примера. Рассмотрим следующие пространства имен:

Namespace LevelOne

{

//программа, находящаяся в пространстве имен LevelOne

Namespace LevelTwo

{

// программа, находящаяся в пространстве имен LevelOne.LevelTwo

// в ней описывается имя "NameTwo"

}

}

//программа, находящаяся в глобальном пространстве имен

В данном случае обращение к имени NameTwo из глобального пространства имен должно иметь вид LevelOne.LevelTwo.NameTwo, Из пространства имен LevelOne — LevelTwo.NameTwo, а из пространства имен LevelOne.LevelTwo — NameTwo.

Здесь нужно отметить, что имена идентифицируются пространствами имен уникальным образом. Мы можем описать одно и то же имя “NameThree" как в пространстве имен LevelOne, так и в пространстве имен LevelTwo:

Namespace LevelOne

{

// здесь описывается имя "NameThree"