Пространства имен
Это способ, используемый в .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"